Friday, December 16, 2011

SPGrid Filter(Custom)

 protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Session["AllData"] = SelectData();
                grid.DataSource = Session["AllData"];
                grid.DataBind();
                TotalRecords = ((DataTable)Session["AllData"]).Rows.Count;
                TotalPages.InnerText = Convert.ToString((TotalRecords / grid.PageSize) + 1);
                CurrentPage.InnerText = Convert.ToString(grid.PageIndex + 1);
                bindddlgo(ddlGo, Convert.ToInt16(TotalPages.InnerText));
                Session.Add("FilteredData", SelectData());
                //GridView LstName = (GridView)grid.HeaderRow.FindControl("LstName");
               // GridView GridView1 = (GridView)grid.HeaderRow.FindControl("GridView1");
                //lst.SelectedIndexChanged += new EventHandler(lst_SelectedIndexChanged);
                LstName.DataSource = ((DataTable)Session["FilteredData"]).DefaultView.ToTable(true, "Name");
                LstName.DataBind();
                GridView1.DataSource = ((DataTable)Session["FilteredData"]).DefaultView.ToTable(true, "Address");
                GridView1.DataBind();
                GridView2.DataSource = ((DataTable)Session["FilteredData"]).DefaultView.ToTable(true, "Title");
                GridView2.DataBind();
                DisibleNextPreButton();
            }
         
           
        }   
        public DataTable SelectData()
        {
            DataTable dt = new DataTable();
            try
            {

                dt.Columns.Add("Title");
                dt.Columns.Add("Name");
                dt.Columns.Add("Address");
                DataRow row;
                SPSite spSite; SPWeb spWeb; SPList spList;
                SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                    using (spSite = new SPSite(SPContext.Current.Site.Url))
                    {
                        spSite.AllowUnsafeUpdates = true;
                        using (spWeb = spSite.OpenWeb())
                        {
                            spList = spWeb.Lists["Testlist"];
                            spWeb.AllowUnsafeUpdates = true;
                           
                            var query = from SPListItem item in spList.Items
                                        orderby item.ID descending
                                        select item;
                            if (query != null)
                            {
                                foreach (var item in query)
                                {
                                    row = dt.Rows.Add();
                                    row["Name"] = item["Name"].ToString();
                                    row["Title"] = item["Title"].ToString();
                                    row["Address"] = item["Address"].ToString();
                                    //row["ListName"] = list.Title;
                                    //row["ListName"] = "<a href=\"" + list.DefaultViewUrl + "\">" + list.Title + "</a>"; 
                                }
                                //    }
                                //}
                            }
                        }
                    }
                });
                return dt;
            }
            catch (Exception s)
            {
                return dt;
            }
        }
        public DataTable SelectDatafilter(string selectedName, string columnname)
        {
         
         
            DataTable dtold = (DataTable)Session["FilteredData"];
           
            try
            {
                DataView dv = dtold.DefaultView;
              dv.RowFilter = columnname + " LIKE " + "'" + selectedName + "'";
              Session["FilteredData"] = dv.ToTable();            
              return dv.ToTable();
              
            }
            catch (Exception s)
            {
                SPUtility.TransferToSuccessPage(s.ToString());
                return dtold;
            }
        }
        public DataTable SelectDatafilterRef(string selectedName, string columnname)
        {

            DataTable dtold = (DataTable)Session["FilterRef"];
            try
            {
                DataView dv = dtold.DefaultView;
                dv.RowFilter = columnname + " LIKE " + "'" + selectedName + "'";
                Session["FilteredData"] = dv.ToTable();
                return dv.ToTable();
            }
            catch (Exception s)
            {
                SPUtility.TransferToSuccessPage(s.ToString());
                return dtold;
            }
        }
        #region eventhandlers
        private void grid_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            //if (sender == null || e.Row.RowType != DataControlRowType.Header)
            //{             
            //    return;     
            //}          
            //SPGridView grid = sender as SPGridView;
            //if (String.IsNullOrEmpty(grid.FilterFieldName))  
            //{           
            //    return;   
            //}        
            //// Show icon on filtered column 
            //for (int i = 0; i < grid.Columns.Count; i++)    
            //{               
            //    DataControlField field = grid.Columns[i];
            //    if (field.SortExpression == grid.FilterFieldName)  
            //    {                   
            //        Image filterIcon = new Image();
            //        filterIcon.ImageUrl = "/_layouts/images/filter.gif";  
            //        filterIcon.Style[HtmlTextWriterStyle.MarginLeft] = "2px";   
            //        // If we simply add the image to the header cell it will   
            //        // be placed in front of the title, which is not how it   
            //        // looks in standard SharePoint. We fix this by the code 
            //        // below.             
            //        Literal headerText = new Literal();  
            //        headerText.Text = field.HeaderText; 
            //        PlaceHolder panel = new PlaceHolder();  
            //        panel.Controls.Add(headerText);     
            //        panel.Controls.Add(filterIcon);       
            //        e.Row.Cells[i].Controls[0].Controls.Add(panel);  
            //        break;        
            //    }         
            //}     
        }
        //Used to filter data
        private void gridDS_Filtering(object sender, ObjectDataSourceFilteringEventArgs e)
        {
            // ViewState["FilterExpression"] = ((ObjectDataSourceView)sender).FilterExpression;
        }
        //Used to sort the data   
        private void grid_Sorting(object sender, GridViewSortEventArgs e)
        {
            //if (ViewState["FilterExpression"] != null)     
            //{           
            //gridDS.FilterExpression = (string)ViewState["FilterExpression"]; 
            //}        
        }
        protected sealed override void LoadViewState(object savedState)
        {
            //base.LoadViewState(savedState);    
            //if (Context.Request.Form["__EVENTARGUMENT"] != null &&  Context.Request.Form["__EVENTARGUMENT"].EndsWith("__ClearFilter__"))   
            //{              
            //     Clear FilterExpression  
            //    ViewState.Remove("FilterExpression");
            //}     
        }
        protected void grid_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {
            //ListBox lst = (ListBox)grid.HeaderRow.FindControl("LstName");
            //lst.SelectedIndexChanged += new EventHandler(lst_SelectedIndexChanged);
            //lst.DataSource = SelectData();
            //lst.DataTextField = "Name";
            //lst.DataValueField = "Address";
            //lst.DataBind();
        }
        private void gridDS_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
        {
            // e.ObjectInstance = this;
        }
        #endregion
       public int TotalRecords;
        protected void LstName_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            grid.PageIndex = 0;
            if (e.CommandName == "ClearFilter")
            {
                using (GridView lst = (GridView)grid.HeaderRow.FindControl("LstName"))
                {
                    Session["AllData"] = SelectData();
                    Session["FilteredData"] = Session["AllData"];
                    grid.DataSource = (DataTable)Session["FilteredData"];
                    grid.DataBind();
                  
                    TotalRecords = ((DataTable)Session["AllData"]).Rows.Count;
                    TotalPages.InnerText = Convert.ToString((TotalRecords / grid.PageSize) + 1);
                    CurrentPage.InnerText = Convert.ToString(grid.PageIndex + 1);
                    bindddlgo(ddlGo, Convert.ToInt16(TotalPages.InnerText));
                    clearFilter();
                    hdnfilter.Value = "";
                }
            }
            else if (e.CommandName == "sortAsc" || e.CommandName == "sortDesc")
            {            
                DataTable dt = ((DataTable)Session["FilteredData"]);
                DataView dv= dt.DefaultView;
                if (e.CommandName == "sortAsc")
                {
                    dv.Sort = e.CommandArgument.ToString() + " " + "Asc";
                }
                else
                {
                    dv.Sort = e.CommandArgument.ToString() + " " + "Desc";
                }
                grid.DataSource = dv.ToTable();
                grid.DataBind();
                TotalRecords = dt.Rows.Count;
                TotalPages.InnerText = Convert.ToString((TotalRecords / grid.PageSize) + 1);
                CurrentPage.InnerText = Convert.ToString(grid.PageIndex + 1);
                bindddlgo(ddlGo, Convert.ToInt16(TotalPages.InnerText));
            }
            else
            {
                string[] dd = e.CommandArgument.ToString().Split(',');
                if (hdnfilter.Value == dd[1].ToString())
                {
                    DataTable dt = SelectDatafilterRef(dd[0].ToString(), dd[1].ToString());
                    grid.DataSource = dt;
                    grid.DataBind();
                    //Session["FilteredData"] = Session["FilterRef"];
                    TotalRecords = dt.Rows.Count;
                    TotalPages.InnerText = Convert.ToString((TotalRecords / grid.PageSize) + 1);
                    CurrentPage.InnerText = Convert.ToString(grid.PageIndex + 1);
                    bindddlgo(ddlGo, Convert.ToInt16(TotalPages.InnerText));
                    assigfilter(e.CommandName);
                }
                else
                {
                    Session["FilterRef"] = Session["FilteredData"];
                    DataTable dt = SelectDatafilter(dd[0].ToString(), dd[1].ToString());
                    grid.DataSource = dt;
                    grid.DataBind();
                    Session["FilteredData"] = dt;
                    TotalRecords = dt.Rows.Count;
                    TotalPages.InnerText = Convert.ToString((TotalRecords / grid.PageSize) + 1);
                    CurrentPage.InnerText = Convert.ToString(grid.PageIndex + 1);
                    bindddlgo(ddlGo, Convert.ToInt16(TotalPages.InnerText));
                    assigfilter(e.CommandName);
                }
                hdnfilter.Value = dd[1].ToString();
            }
            DisibleNextPreButton();
         
        }
        enum CommandNames
        {
            Name,
            Address,
            Title
        }
        protected void assigfilter(string colName)
        {
            string[] names = Enum.GetNames(typeof(CommandNames));
           
            foreach (var item in names)
            {
                GridView grd = getgridview(item);
                if (item != colName)
                {
                    DataTable dt = (DataTable)Session["FilteredData"];
                    grd.DataSource = dt.DefaultView.ToTable(true, item);
                    grd.DataBind();
                }
            }
        }
        private GridView getgridview(string item)
        {
            GridView grd = new GridView();
            switch (item)
            {
                case "Name":
                    grd = LstName;
                    break;
                case "Address":
                    grd = GridView1;
                    break;
                case "Title":
                    grd = GridView2;
                    break;
                default:
                    break;
            }
            return grd;
        }
       
        protected void clearFilter()
        {
          
            string[] names = Enum.GetNames(typeof(CommandNames));
            foreach (var item in names)
            {
                GridView grd = getgridview(item);
                DataTable dt = (DataTable)Session["AllData"];
                    grd.DataSource = dt.DefaultView.ToTable(true, item);
                    grd.DataBind();
                  
              
            }
            grid.DataSource = (DataTable)Session["AllData"];
        }
        protected void bindddlgo(DropDownList ddlGo, int maxpage)
        {
            ddlGo.Items.Clear();
            for (int i = 1; i <= maxpage; i++)
            {
                ddlGo.Items.Add(i.ToString());
            }
          
        }
        protected void DisibleNextPreButton()
        {
            if (TotalPages.InnerText == CurrentPage.InnerText)
            {
                imgNext.Visible = false;
            }
            else
            {
                imgNext.Visible = true;
            }
            if (CurrentPage.InnerText == "1")
            {
                imgPrev.Visible = false;
            }
            else
            {
                imgPrev.Visible = true;
            }
        }
        protected void imgPrev_Click(object sender, ImageClickEventArgs e)
        {
            grid.PageIndex = grid.PageIndex - 1;
            grid.DataSource = (DataTable)Session["FilteredData"];
            grid.DataBind();
            TotalRecords = ((DataTable)Session["FilteredData"]).Rows.Count;
            TotalPages.InnerText = Convert.ToString((TotalRecords / grid.PageSize)+1);
            CurrentPage.InnerText = Convert.ToString(grid.PageIndex+1);
            bindddlgo(ddlGo, Convert.ToInt16(TotalPages.InnerText));
            DisibleNextPreButton();
        }
        protected void imgNext_Click(object sender, ImageClickEventArgs e)
        {
            grid.PageIndex = grid.PageIndex + 1;
            grid.DataSource = (DataTable)Session["FilteredData"];
            grid.DataBind();
            TotalRecords = ((DataTable)Session["FilteredData"]).Rows.Count;
            TotalPages.InnerText = Convert.ToString((TotalRecords / grid.PageSize) + 1);
            CurrentPage.InnerText = Convert.ToString(grid.PageIndex + 1);
           bindddlgo(ddlGo, Convert.ToInt16(TotalPages.InnerText));
           DisibleNextPreButton();
        }
       
        protected void imgGo_click(object sender, ImageClickEventArgs e)
        {
            TotalRecords = ((DataTable)Session["FilteredData"]).Rows.Count;
            TotalPages.InnerText = Convert.ToString((TotalRecords / grid.PageSize) + 1);
            if (Convert.ToInt16(ddlGo.SelectedItem.Text) <= Convert.ToInt16(TotalPages.InnerText) && Convert.ToInt16(ddlGo.SelectedItem.Text)!=0)
            {
                grid.PageIndex = Convert.ToInt16(ddlGo.SelectedItem.Text)-1;
                grid.DataSource = (DataTable)Session["FilteredData"];
                grid.DataBind();
                CurrentPage.InnerText = Convert.ToString(grid.PageIndex + 1);
                lblpgexceed.Text = string.Empty;
              
            }
            else
            {
                lblpgexceed.Text = "Page Does not Exist";
            }
            DisibleNextPreButton();
        }

No comments:

Post a Comment

Creating Provider hosted app (sharepoint online) with local hosted IIS

The Pre-requires are as follows. 1. Office 365 Subscription 2. Visual Studio 2015 (Professional/Community/Enterprise Edition) With t...