GridView多條件篩選資料
阿新 • • 發佈:2019-02-08
最近有一個需求,需要對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(); }