Question

J'ai la page de la grille SP dans ma page d'application, je lie certaines données à la grille SP Grid Vie, je veux maintenant appliquer le filtrage pour cette grille.Je essayé le code suivant, je reçois une erreur lorsque je clique sur le bouton de filtragedans la vue de la grille comme indiqué dans l'image ci-dessous.Aidez-moi, s'il vous plaît.Je suis frappé avec ce problème depuis 2 jours

erreur

J'ai utilisé le code suivant pour filtrer

 string FilterExpression
        {
            get
            {
                if (ViewState["FilterExpression"] == null)
                {
                    ViewState["FilterExpression"] = "";
                }

                return (string)ViewState["FilterExpression"];
            }
            set
            {
                string thisFilterExpression = "(" + value.ToString() + ")";
                List<string> fullFilterExpression = new List<string>();

                if (ViewState["FilterExpression"] != null)
                {
                    string[] fullFilterExp = ViewState["FilterExpression"].ToString().Split(_ssep, StringSplitOptions.RemoveEmptyEntries);
                    fullFilterExpression.AddRange(fullFilterExp);

                    //if the filter is gone expression already exist?
                    int index = fullFilterExpression.FindIndex(s => s.Contains(thisFilterExpression));
                    if (index == -1)
                    { fullFilterExpression.Add(thisFilterExpression); }
                }
                else
                {
                    fullFilterExpression.Add(thisFilterExpression);
                }
                //loop through the list<T> and serialize to string
                string filterExp = string.Empty;
                fullFilterExpression.ForEach(s => filterExp += s + " AND ");
                filterExp = filterExp.Remove(filterExp.LastIndexOf(" AND "));
                if (!filterExp.EndsWith("))") && filterExp.Contains("AND"))
                {
                    filterExp = "(" + filterExp + ")";
                }
                ViewState["FilterExpression"] = filterExp;
            }
        }


 public DataTable GetDataForFiltering()
        {
            string siteUrl = SPContext.Current.Web.Url;
            using (SPSite oSite = new SPSite(siteUrl))
            {
                using (SPWeb oWeb = oSite.OpenWeb())
                {
                    SPList oListSCat = oWeb.Lists["listHelpDesk"];
                    SPListItemCollection olistItemColl = oListSCat.Items;
                    if (!dt.Columns.Contains("Functional Area"))
                    {
                        dt.Columns.Add("FunctionalArea");
                    }
                    if (!dt.Columns.Contains("Category"))
                    {
                        dt.Columns.Add("Category");
                    }
                    if (!dt.Columns.Contains("SubCategory"))
                    {
                        dt.Columns.Add("SubCategory");
                    }
                    if (!dt.Columns.Contains("Tier"))
                    {
                        dt.Columns.Add("Tier");
                    }
                    //if (!dt.Columns.Contains("Region"))
                    //{
                    //    dt.Columns.Add("Region");
                    //}
                    if (!dt.Columns.Contains("Status"))
                    {
                        dt.Columns.Add("Status");
                    }
                    if (!dt.Columns.Contains("Subject"))
                    {
                        dt.Columns.Add("Subject");
                    }
                    if (!dt.Columns.Contains("Description"))
                    {
                        dt.Columns.Add("Description");
                    }
                    if (!dt.Columns.Contains("Attachments"))
                    {
                        dt.Columns.Add("Attachments");
                    }
                    foreach (SPListItem listItem in olistItemColl)
                    {
                        DataRow dr = dt.NewRow();

                        string fncArea = listItem["Functional Area"].ToString();
                        dr["FunctionalArea"] = fncArea.Split('#')[1];
                        string cat = listItem["Category"].ToString();
                        dr["Category"] = cat.Split('#')[1];
                        string scat = listItem["Subcategory"].ToString();
                        dr["SubCategory"] = scat.Split('#')[1];
                        string tier = listItem["Tier"].ToString();
                        dr["Tier"] = tier.Split('#')[1];
                        //string region = listItem["Region"].ToString();
                        //dr["Region"] = region.Split('#')[1];

                        dr["Status"] = listItem["Status"].ToString();
                        dr["Subject"] = listItem["Subject"].ToString();
                        dr["Description"] = listItem["Description"].ToString();
                        dr["Attachments"] = "Download link";
                        dt.Rows.Add(dr);

                    }
                    return dt;

                }
            }
        }

        public void Filtering()
        {
            try
            {
                objDS = new ObjectDataSource();
                objDS.ID = "objDSWaitingApprovals";
                objDS.SelectMethod = "GetDataForFiltering";
                objDS.TypeName = this.GetType().AssemblyQualifiedName;
                objDS.EnableViewState = false;

                //pass the SortExpression to the select method
                //objDS.SortParameterName = "SortExpression";

                //this resets the dropdown options for other columns after a filter is selected
                objDS.FilterExpression = FilterExpression;
                //add the data source
                Controls.Add(objDS);
                spgrdView.EnableViewState = false;
                //filtering 
                spgrdView.AllowFiltering = true;
                spgrdView.FilterDataFields = "FunctionalArea,Category,SubCategory,Tier,Subject,Description,Attachments,Status";
                spgrdView.FilteredDataSourcePropertyName = "FilterExpression";
                spgrdView.FilteredDataSourcePropertyFormat = "{1} = '{0}'";
                spgrdView.DataSourceID = objDS.ID;
                spgrdView.DataBind();
            }

            catch (Exception ex)
            {
                Page.ClientScript.RegisterClientScriptBlock(typeof(SPAlert), "alert", "<script language=\"javascript\">alert('" + ex.Message + " .')</script>");
            }
        }



 public void spgrdView_OnRowDataBound(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;
                }
            }
}

Était-ce utile?

La solution

Utilisez la partie Web plutôt que la page d'application.

J'ai utilisé une partie Web sa fonction de travail pour moi maintenant.

Autres conseils

Le contrôle DataGridView fournit la prise en charge de filtrage des données girding plus que,contient, moins de, est égal à et plus de conditions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top