【问题标题】:How to group and rowFilter a column如何对列进行分组和行过滤
【发布时间】:2015-04-02 13:36:12
【问题描述】:

我的 datagridview 从数据库中获取记录,如下所示:

[Country]     
  Gh
  Ng
  Sa
  Gm
  Sw
  Ru

我现在想使用组合框过滤此列。我的组合框中有两个值 非洲和欧洲。我的期望是得到这样的东西:

//If i select Africa in the combobox
  Gh
  Ng
  Sa
// And if i select Europe
  Gm
  Sw
  Ru

到目前为止,这是我的代码:

private void combobox1_SelectedIndexChanged(object sender, EventArgs e)
    {

            try
            {
                //Check an see what's in the dgv
          DataView dv = new DataView(dt);
          dv.RowFilter = "[Country]  LIKE '%" + combobox1.Text.Trim() + "%'";
          datagridview1.DataSource = dv;
            }
            catch (Exception)
            {
    MessageBox.Show("Column not found", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        }

如何将它们分组并实施?

【问题讨论】:

  • 如果您只想显示组合框中指定的国家/地区,您可以通过隐藏所有其他行来实现。要检测应该显示的内容,您可以在表中添加与组合框具有相同值的行。并确保每个国家都被添加到它所在的国家。然后你相应地显示/隐藏行
  • @maam27。你能给我一个实际的例子吗?我是个新人
  • 我在我的一个项目中进行了数据网格搜索,因此我应该能够对示例进行一些更改,但为了使其正常工作,您需要在数据库中添加一个新列并有那个叫continent 或者你想把它们分组的东西。如果需要,可以显示该列,但该列将决定是否显示该行
  • @maam27。我不能在 try 部分使用 IF 语句并指示它查看 Country 列并将快捷方式分组到非洲和欧洲吗?所以如果我在组合框中选择它只会给我相关的问题是我在数据库中的记录太多了。新列将很耗时。 [4张表,每张记录超过1000条] :(
  • 我想使用新列的代码会更少,但是您可以更改我作为 awnser 发布的 foreach 循环内的逻辑,以查看选择了哪些组合框项目并基于它可以设置知道要显示和隐藏哪些国家/地区

标签: c# winforms datagridview


【解决方案1】:

试试这样的:

foreach (DataGridViewRow row in dataGridView1.Rows)
{
  //search for identical value
  if (row.Cells[0].Value.ToString().Equals(searchValue))//searchvalue would be set using ComboBox.Text
  {
    dataGridView1.Rows[0].Visible = true;
  }
  //search for first art that contains search value
  else
  {
    dataGridView1.Rows[0].Visible = false;
  }
}

这可能不完全正确,因为我必须在没有编译器的情况下快速完成此操作

【讨论】:

    猜你喜欢
    • 2022-06-20
    • 1970-01-01
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多