1

我有一组数据的 DataGridView,我想选择仅“查看”表单中参数的某些行,这会缩小列表以使我的选择更容易..

i.e.    ComboBox has two choices -> "aaa" and "bbb"
=====

Column1 | Column 2
aaa     | 123
aaa     | 234
bbb     | 345
bbb     | 456
aaa     | 567
bbb     | 678

选择 ComboBox 为“aaa”后,我应该得到结果

Column1 | Column 2
aaa     | 123
aaa     | 234
aaa     | 567

这应该允许我单击该行以将该行中的信息转换为单独的形式..

但是原始数据必须保持不变..我不想改变它,只是以不同的方式看待它..

4

1 回答 1

0

如果您使用的是 LINQ 数据源,则可以根据组合框是否有选择进行过滤。

var result = from i in MyDataContext select i.Col1, i.Col2

if (! String.IsNullOrEmpty(cbComboBox1.Text))
{
   result = from i in result where i.Col1 == cbComboBox1.Text
            select i;
}

如果您不使用 LINQ 数据源,则可以使用 LINQ 通过在 indexchanged 事件中使用它来将过滤器应用于已经数据绑定的 DataGridView。当您想显示所有数据时,您还需要编写一些内容以再次删除过滤器。

if (! string.IsNullOrEmpty(cbComboBox1.Text))
{
    var result = from DataGridViewRow row in dgvData.Rows
                 where row.Cells["Column1"].Value as string != cbComboBox1.Text
                 select row.Index;

    foreach (var i in result)
    {
        dgvData.Rows[i].Visible = false;
    }
}
于 2013-05-18T12:28:43.080 回答