Tuesday, 22 December 2015

Pagination, Sorting and Filtering in SPGridView

Refer Link

code on .ascx

<SharePoint:SPGridView ID="gvCRBooked" runat="server" AutoGenerateColumns="false"
                                Width="850px">
                                <RowStyle BackColor="#D0D8E8" Height="30px" HorizontalAlign="Left" />
                                <AlternatingRowStyle BackColor="#E9EDF4" Height="30px" HorizontalAlign="Left" />
                                <HeaderStyle HorizontalAlign="Left" CssClass="ms-viewheadertr" />
                                <Columns>
                                    <asp:TemplateField HeaderText="Tool Name" ControlStyle-Width="250px" SortExpression="Title"
                                        HeaderStyle-CssClass="ms-viewheadertr">
                                        <ItemTemplate>
                                            <asp:Label ID="lblTitle" runat="server" Text='<%# Eval("Title") %>'></asp:Label>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="Author" ControlStyle-Width="100px" SortExpression="Author0"
                                        HeaderStyle-CssClass="ms-viewheadertr">
                                        <ItemTemplate>
                                            <asp:Label ID="lblConferenRoom" runat="server" Text='<%# Eval("Author0") %>'></asp:Label>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="TimeStream" ControlStyle-Width="100px" SortExpression="TimeStream"
                                        HeaderStyle-CssClass="ms-viewheadertr">
                                        <ItemTemplate>
                                            <asp:Label ID="lblLocation" runat="server" Text='<%# Eval("TimeStream") %>'></asp:Label>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="WorkStream" ControlStyle-Width="100px" SortExpression="WorkStream"
                                        HeaderStyle-CssClass="ms-viewheadertr">
                                        <ItemTemplate>
                                            <asp:Label ID="lblFromDateTime" runat="server" Text='<%# Eval("WorkStream") %>'></asp:Label>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="Modified" ControlStyle-Width="100px" SortExpression="Modified"
                                        HeaderStyle-CssClass="ms-viewheadertr">
                                        <ItemTemplate>
                                            <asp:Label ID="lblToDateTime" runat="server" Text='<%# Eval("Modified") %>'></asp:Label>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="ToolStatus" ControlStyle-Width="300px" SortExpression="ToolStatus" HeaderStyle-HorizontalAlign="Left"
                                        HeaderStyle-CssClass="ms-viewheadertr">
                                        <ItemTemplate>
                                            <asp:Label ID="lblDescription" runat="server" Text='<%# Eval("ToolStatus") %>'></asp:Label>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:TemplateField HeaderText="Link" ControlStyle-Width="100px"
                                        HeaderStyle-CssClass="ms-viewheadertr">
                                        <ItemTemplate>
                                            <asp:Label ID="lblBookedDuration" runat="server" Text='<%# Eval("Link") %>'></asp:Label>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                </Columns>
                                <EmptyDataTemplate>
                                    <asp:Label ID="lblNoAccess" Text="No records available" runat="server" CssClass="emptyDataLabel"></asp:Label>
                                </EmptyDataTemplate>
                            </SharePoint:SPGridView>


code on ascx.cs

 ObjectDataSource gridDS = null;
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                SetToolsDashboardData();
                const string DATASOURCEID = "gridDS";
                gridDS = new ObjectDataSource();
                gridDS.ID = DATASOURCEID;
                gridDS.SelectMethod = "SelectData";
                gridDS.TypeName = this.GetType().AssemblyQualifiedName;
                gridDS.ObjectCreating += new ObjectDataSourceObjectEventHandler(gvCRBooked_ObjectCreating);
                this.Controls.Add(gridDS);
                BindGrid();
            }
            catch (Exception ex)
            {
            }
        }

        void gvCRBooked_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
        {
            e.ObjectInstance = this;
        }
        public DataTable SelectData()
        {
            DataTable dataSource = new DataTable();
            SPSite site = SPContext.Current.Web.Site;
            SPWeb web = null; ;
            try
            {
             
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    web = site.OpenWeb();
                    SPList spList = web.Lists["Tools"];
                    SPListItemCollection spListItemCollection = spList.Items;
                    SPQuery query = new SPQuery();
                    //IEnumerable<SPListItem> lstItemICSSDocuments = lstICSSDocuments.GetItems(query).OfType<SPListItem>();  
                    dataSource.Columns.Add("Title");
                    dataSource.Columns.Add("Author0");
                    dataSource.Columns.Add("TimeStream");
                    dataSource.Columns.Add("WorkStream");
                    dataSource.Columns.Add("Modified");
                    dataSource.Columns.Add("ToolStatus");
                    dataSource.Columns.Add("Link");

                    foreach (SPListItem itms in spListItemCollection)
                    {
                        DataRow dr = dataSource.NewRow();
                        dr["Title"] = itms["Title"];
                        dr["Author0"] = Convert.ToString(itms["Created By"]).Split('#')[1].ToString();
                        dr["TimeStream"] = itms["TimeStream"];
                        dr["WorkStream"] = itms["WorkStream"];
                        dr["Modified"] = Convert.ToDateTime(itms["Modified"]).ToShortDateString();
                        dr["ToolStatus"] = itms["ToolStatus"];
                        dr["Link"] = itms["Link"];
                        dataSource.Rows.Add(dr);
                    }
                });
                web.Dispose();
            }
            catch (Exception ex)
            {

            }
            return dataSource;
        }




        private void BindGrid()
        {
            gvCRBooked.AllowPaging = true;
            // Sorting          
            gvCRBooked.AllowSorting = true;
            //allow Filtering            
            gvCRBooked.FilterDataFields = "Title,Author0,TimeStream,WorkStream,Modified,ToolStatus";
            gvCRBooked.FilteredDataSourcePropertyName = "FilterExpression";
            gvCRBooked.FilteredDataSourcePropertyFormat = "{1} = '{0}'";
            gvCRBooked.Sorting += new GridViewSortEventHandler(gvCRBooked_Sorting);
            gvCRBooked.PageIndexChanging += new GridViewPageEventHandler(gvCRBooked_PageIndexChanging);
            //For Filtering
            gridDS.Filtering += new ObjectDataSourceFilteringEventHandler(gvCRBooked_Filtering);
            gvCRBooked.AutoGenerateColumns = false;
            gvCRBooked.AllowFiltering = true;
            gvCRBooked.PagerTemplate = null;
            gvCRBooked.PageSize = 3;
            gvCRBooked.DataSourceID = gridDS.ID;
            gvCRBooked.DataBind();
        }

        void gvCRBooked_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvCRBooked.PageIndex = e.NewPageIndex;
            gvCRBooked.DataSourceID = gridDS.ID;
            gvCRBooked.DataBind();
        }

        void gvCRBooked_Sorting(object sender, GridViewSortEventArgs e)
        {
            string lastExpression = "";
            if (ViewState["SortExpression"] != null)
                lastExpression = ViewState["SortExpression"].ToString();
            string lastDirection = "asc";
            if (ViewState["SortDirection"] != null)
                lastDirection = ViewState["SortDirection"].ToString();
            string newDirection = string.Empty;
            if (e.SortExpression == lastExpression)
            {
                e.SortDirection = (lastDirection == "asc") ? System.Web.UI.WebControls.SortDirection.Descending : System.Web.UI.WebControls.SortDirection.Ascending;
            } newDirection = (e.SortDirection == System.Web.UI.WebControls.SortDirection.Descending) ? "desc" : "asc";
            ViewState["SortExpression"] = e.SortExpression;
            ViewState["SortDirection"] = newDirection;
            gvCRBooked.DataBind();             //For Filter  
            if (ViewState["FilterExpression"] != null)
            {
                gridDS.FilterExpression = (string)ViewState["FilterExpression"];
            }
        }

        //For Filtering    
        private void gvCRBooked_Filtering(object sender, ObjectDataSourceFilteringEventArgs e)
        {
            ViewState["FilterExpression"] = ((ObjectDataSourceView)sender).FilterExpression;
        }
    }

No comments:

Post a Comment