【问题标题】:Filtering an unbound datagridview in C#在 C# 中过滤未绑定的数据网格视图
【发布时间】:2020-02-21 17:41:53
【问题描述】:

我有一个数据网格视图,其中显示了学生及其年级组的完整列表以及其他信息。 我希望能够使用组合框对其进行过滤,以便我可以选择例如 9 年级,而 datagridview 将仅显示 9 年级的学生及其详细信息。 感谢您提供各种帮助 - 我是 C# 新手

我已经在我的组合框上尝试了以下代码

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
        foreach (DataGridViewRow df in this.dataGridView1.Rows)
        {
            string TextVar;
            TextVar = comboBox1.Text;


            if (dataGridView1.Rows[df.Index].Cells[3].Value.ToString()== (TextVar))
            {
                dataGridView1.Rows[df.Index].Visible = true;
            }
            else
            {
                dataGridView1.Rows[df.Index].Visible = false;
            }
        }
    }

【问题讨论】:

  • 你有绑定源吗?如果是这样,您可能需要将代码放在 bSource.SuspendBinding();bSource.ResumeBinding(); 之间,以使更改生效。
  • 嗨 - 感谢您的回复,不,它是未绑定的

标签: c# foreach datagridview filtering


【解决方案1】:

我知道你说它是未绑定的,但请试试这个:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    var bc = BindingContext[dataGridView1.DataSource];
    bc.SuspendBinding();

    for (int i = 0; i < (dataGridView1.Rows.Count - 1); i++)
    {
        dataGridView1.Rows[i].Visible = (dataGridView1.Rows[i].Cells[3].Value.ToString() == comboBox1.Text);
    }

    bc.ResumeBinding();
}        

【讨论】:

  • 谢谢你 - 我已经把它放在了,但我得到“System.Windows.Forms.dll 中出现“System.ArgumentNullException”类型的未处理异常”错误出现。非常感谢您花时间来做这件事。
  • 看起来 bc 为空 - 显然与数据源有关,但我对此并不熟悉。
  • @Edel_28 好的,所以删除上面带有“bc”的三行并重试,如果不起作用,请尝试在代码末尾添加 dataGridView1.Refresh()dataGridView1.Update()
  • 这不会引发错误并且似乎正在尝试过滤。但是,数据网格已更新以不显示任何结果。也许它在错误的列中查找?
  • Cells{3} = 第 4 列,确保它是正确的,否则可能会导致将所有行设置为不可见
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 2011-03-16
  • 1970-01-01
相关资源
最近更新 更多