1. 程式人生 > >GridView多條件篩選資料

GridView多條件篩選資料

最近有一個需求,需要對gridview中的資料進行多條件塞選,比較粗糙的解決辦法做了一個demo.

下面擷取的部分程式碼中 toolName,lcs, purpose, version是根據這些資料對gridview進行塞選。

在程式碼中注意用linq時判斷兩個數是否相等最好是用”==”,如果用equals方法需小心,如果A.equals(B),A為空的話不會出現任何錯誤,只能除錯才能發現錯,因為linq裡面的lamda表示式內部的確拋了一個錯誤,但是不會將此錯誤拋向介面。


private void Filter() {
            string toolName = txtToolname.Text;
            string lcs = ddlLifeCycle.SelectedValue;
            string purpose = ddlPurpose.SelectedValue;
            string version = ddlVersion.SelectedValue;
           DataSet ds = ServiceIPM.GetTools(Infosys.AMW.Common.AppConstants.LoginName, Infosys.AMW.Common.AppConstants.ProjectCodeFromURL, Infosys.AMW.Common.AppConstants.TLPITEMTYPE);
            //DataSet ds = GridViewExportUtil.GetToolsData();
            DataTable dt = ds.Tables[0];
            EnumerableRowCollection<DataRow> query=null;
            if (IsDateSetNullOREmpty(ds))
            {
                if (!string.IsNullOrEmpty(toolName) && lcs != "select" && purpose != "select" && version != "select")
                {
                    query = from data in dt.AsEnumerable()
                            where
                            data.Field<string>("m__strToolName").ToUpper().Contains(toolName.ToUpper())
                            && data.Field<string>("m__strLCStage") == lcs
                            && data.Field<string>("m__strVersion") == version
                            && data.Field<string>("m__strPurpose") == purpose
                            select data;
                }
                else if (string.IsNullOrEmpty(toolName))
                {
                    query = from data in dt.AsEnumerable()
                            where
                              data.Field<string>("m__strLCStage") == (lcs)
                                || data.Field<string>("m__strVersion") == version
                                 || data.Field<string>("m__strPurpose") == purpose
                            select data;
                }
                else
                {
                    query = from data in dt.AsEnumerable()
                            where
                            (data.Field<string>("m__strToolName").ToUpper().Contains(string.IsNullOrEmpty(toolName) ? null : (toolName.ToUpper()))
                            || data.Field<string>("m__strLCStage") == (lcs)
                            || data.Field<string>("m__strVersion") == version
                            || data.Field<string>("m__strPurpose") == purpose)
                            select data;
                }
                //return query == null ? null : query.AsDataView();
               
            }
            if (query != null)
            {
                BindDataViewToGV(query.AsDataView());
            }
            else { BindDataViewToGV(null); }
            //return null;
        }
        private void BindDataViewToGV(DataView dv) {
            if (dv != null && dv.Count > 0)
            {
                string sortExpression = gvPlanedTools.Attributes["SortExpression"];
                string sortDirection = gvPlanedTools.Attributes["SortDirection"];
                ViewState["PageCount"] = dv.Count.ToString();
                if ((!string.IsNullOrEmpty(sortExpression)) && (!string.IsNullOrEmpty(sortDirection)))
                {
                    dv.Sort = string.Format("{0} {1}", sortExpression, sortDirection);
                }
                gvPlanedTools.PageSize = Convert.ToInt32(ControlDrp);
                gvPlanedTools.DataSource = dv;
                gvPlanedTools.DataBind();
                InitRecords();
                SortForImage(gvPlanedTools.Attributes["SortDirection"], gvPlanedTools.Attributes["SortExpression"]);
            }
            else {
                panShow.Visible = false;
                panError.Visible = true;
                lbError.Text = PageMessage.ERRORWEBSERVICEDATA;
            }
            //ViewState["PageCount"] = dv.Count.ToString();
            //gvPlanedTools.DataSource = dv;
            //gvPlanedTools.DataBind();
            //InitRecords();
        }