我有一個datagridview
和5 ComboBoxes
,我想用ComboBox的文本值過濾網格的行。網格被填充存儲過程取決於FormLoad
事件中的一些條件。我應該在btn_filter
點擊事件中再次填充它嗎?無法綁定到數據表,沒有名稱錯誤,同時過濾gridview
反正這個例外是在下面的代碼逮住:cannot bind to datatable with no name.
這裏是btn_filter
代碼:
private void btnFilter_Click(object sender, EventArgs e)
{
String filterStr = "";
if (cmbGrp.Text.Trim() != String.Empty)
filterStr += "group ='" + cmbGrp.Text.Trim() + "' and";
if(cmbMdl.Text.Trim() != String.Empty)
filterStr += " model ='" + cmbMdl.Text.Trim() + "' and";
if (cmbTrh.Text.Trim() != String.Empty)
filterStr += " tarh ='" + cmbTrh.Text.Trim() + "' and";
if (cmbSiz.Text.Trim() != String.Empty)
filterStr += " size ='" + cmbSiz.Text.Trim() + "' and";
if (cmbClr.Text.Trim() != String.Empty)
filterStr += " color ='" + cmbClr.Text.Trim() + "'";
if (filterStr.LastIndexOf("and") == filterStr.Length - 3)
filterStr = filterStr.Remove(filterStr.Length-3,3);
DataView view = new DataView();
if (condition1)
view.Table = Production.usp1(txtProdCode.Text);
else if (condition2)
view.Table = Production.usp2();
else
return;
view.RowFilter = filterStr;
dgv.DataSource = view;
}
這裏是StoredProcedure的相關功能(在Production
類):
public static DataTable usp2()
{
SqlCommand cmd = new SqlCommand("usp2");
return callProc(cmd);
}
public static DataTable usp1(String prod_code)
{
SqlCommand cmd = new SqlCommand("usp1");
cmd.Parameters.Add(new SqlParameter("@prod_code", prod_code));
return callProc(cmd);
}
是有沒有再次填充網格的方式,過濾器之前?我正在使用這個類型:'DataTable dt =(DataTable)dgv.DataSource;' – rene
@rene,是的,你可以按照你在這個評論中顯示的方式來做。你可以將你的數據源轉換爲數據視圖,進行過濾並再次調用DataBind。在這裏閱讀更多:http://stackoverflow.com/questions/5843537/filtering-datagridview-without-changing-datasource – RAS
感謝您的鏈接,我找到了一個更簡單的答案! – rene