Hi,
I am working in Visual web part with Sharepoint 2010 foundation.
I have used the ootb concept of sorting,filtering and paging in SPGridView + DataSource + DataTable
Here is my code:
<SharePoint:SPGridView runat="server" ID="reportsList" AutoGenerateColumns="false"
PageSize="3" AllowPaging="true" AllowSorting="true" AllowFiltering="true"
FilterDataFields="Title,Status" FilteredDataSourcePropertyName="FilterExpression"
FilteredDataSourcePropertyFormat="{1} LIKE '{0}'">
<Columns>
<SharePoint:SPBoundField HeaderText="Title" SortExpression="Title" DataField="Title" />
<SharePoint:SPBoundField HeaderText="Status" SortExpression="Status" DataField="Status" />
<asp:TemplateField HeaderText="Get Candidates">
<ItemTemplate>
<asp:LinkButton ID="lnkBtnGetCandidates" runat="server" Text="Get Candidates" CausesValidation="False"
CommandName="Select" CommandArgument='<%#Eval("Description")%>'></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<EmptyDataTemplate>
No data.
</EmptyDataTemplate>
</SharePoint:SPGridView>
<asp:ObjectDataSource ID="ODS1" runat="server" EnablePaging="true" EnableCaching="false"
TypeName="SPGridView.SPGrid.SPGridUserControl, $SharePoint.Project.AssemblyFullName$"
SelectMethod="SelectAdvanced" SelectCountMethod="CountSelectAdvanced" ></asp:ObjectDataSource>
//Code behind
protected void Page_Load(object sender, EventArgs e)
{
reportsList.PagerTemplate = null;
}
public DataTable GetTable()
{
DataTable dt = new DataTable();
dt.Columns.Add("Title");
dt.Columns.Add("Status");
dt.Columns.Add("Description");
dt.Rows.Add(new object[] { "Sanjiv1", ".Net1", "jjj1" });
dt.Rows.Add(new object[] { "Sanjiv2", ".Net2", "jjj2" });
dt.Rows.Add(new object[] { "Sanjiv3", ".Net3", "jjj3" });
dt.Rows.Add(new object[] { "Sanjiv4", ".Net4", "jjj4" });
dt.Rows.Add(new object[] { "Sanjiv5", ".Net5", "jjj" });
dt.Rows.Add(new object[] { "Mahesh", "Sharepoint", "jjj" });
dt.Rows.Add(new object[] { "Sanjiv", ".Net", "jjj" });
return dt;
}
public DataView SelectAll()
{
DataTable table = GetTable();
table.DefaultView.Sort = "Title";
return table.DefaultView;
}
public DataTable SelectAdvanced(int maximumRows, int startRowIndex)
{
DataTable table = GetTable();
DataTable filteredTable;
if (maximumRows > 0)
filteredTable = table.Rows.OfType<DataRow>().Skip(startRowIndex).Take(maximumRows).CopyToDataTable();
else
filteredTable = table;
return filteredTable;
}
public int CountSelectAdvanced()
{
return SelectAll().Count;
}
Now my issue is everything is working well apart from Sorting and filtering in next page. If is filter any item of current page, it filter, but if i select any item which is in next page, it show "No Data". same thing happens with sorting as well. Please help to identify where i am missing things.
Thanks
Mahesh