我有一个datagridview
从数据库获取数据,有三个checkBoxes
应该用作过滤器。
我想通过选中datagridview
中的一个或多个来过滤checkedboxes
,并且应该在datagridview
中显示所选项目,并将其与金额相关联:
我的代码:
if (cb11.Checked == true)
{
try
{
//Check an see what's in the dgv
DataView dv = new DataView(dt);
dv.RowFilter = " [AreaCode] = " + cb11.Text.Trim();
datagridview1.DataSource = dv;
}
catch (Exception)
{
MessageBox.Show("Can’t find the column", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
这只给我11的值 我如何加入另一个,以便我可以选择倍数?
答案 0 :(得分:1)
如果没有看到您尝试过的代码,我只会解释您可以尝试的内容。
假设您只从数据库中获取数据一次:
每次选中/取消选中复选框
2.1。清除datagridview
2.2。遍历您的列表并根据选中的复选框填充您的datagridview。
如果您多次提取数据:
每次选中/取消选中复选框
1.1。清除datagridview
1.2。根据选中的复选框构建查询
1.3。查询您的数据,并填充您的datagridview
修改强>
因此,使用您提供的代码,尝试创建一个字符串,在评估所有复选框后,您将设置为RowFilter。
string rowFilter = string.Empty;
if (cb11.Checked)
{
rowFilter += " [AreaCode] = " + cb11.Text.Trim();
}
if (cb16.Checked)
{
if (rowFilter.Length > 0)
rowFilter += " OR";
rowFilter += " [AreaCode] = " + cb16.Text.Trim();
}
if (cb31.Checked)
{
if (rowFilter.Length > 0)
rowFilter += " OR";
rowFilter += " [AreaCode] = " + cb31.Text.Trim();
}
try
{
//Check an see what's in the dgv
DataView dv = new DataView(dt);
dv.RowFilter = rowFilter;
datagridview1.DataSource = dv;
}
catch (Exception)
{
MessageBox.Show("Can’t find the column", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
答案 1 :(得分:0)
试试这个:
string RowFilter = string.Empty;
CreateOrAppendToFilter(cb11, ref RowFilter);
CreateOrAppendToFilter(cb16, ref RowFilter);
CreateOrAppendToFilter(cb31, ref RowFilter);
if(RowFilter.Length > 0)
{
try
{
//Check an see what's in the dgv
DataView dv = new DataView(dt);
dv.RowFilter = RowFilter;
datagridview1.DataSource = dv;
}
catch (Exception)
{
MessageBox.Show("Can’t find the column", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void CreateOrAppendToFilter(CheckBox cb, ref string RowFilter)
{
if(RowFilter.Length>0)
{
RowFilter += " OR ";
}
RowFilter += (cb.Checked) ? string.Format("[AreaCode] = {0}", cb.Text.Trim()) : string.Empty ;
}