【问题标题】:C# DataGridView detecting select all buttonC# DataGridView 检测全选按钮
【发布时间】:2018-02-15 10:45:52
【问题描述】:

我正在开发一个 C# Windows 窗体程序,并在其上实现了一个 DataGridView。现在,在设置数据源之后,当我单击 datagridview 上的左上角按钮时,它会选择所有行,就像 Microsoft Excel 一样。但是,我动态隐藏和显示其上的行,单击该按钮后,我意识到它还选择了 不可见的。 我不想实现“SelectionChanged”事件,因为我不断选择一些行通常我不能选择不可见的。只有这个按钮选择它。我正在寻找这样的活动:

datagridView1_SelectAllClicked(object sender, EventArgs e)
{
     // do stuff
}

这样的方法也可以,因为我不必检查所有选择:

dataGridView1_SelectionChanged(object sender, EventArgs e)
{
     if(dataGridView1.IsSelectAllCells())
     {
          // do stuff
     }
}

如果必须,我将添加事件以取消选择不可见行,但我更喜欢第一个解决方案。有什么建议吗?提前致谢。

编辑:我只在单击按钮时检查“dataGridView1.SelectedRows”属性,而不是在进行选择之后。所以,我可以为按钮点击事件实现的一些功能也可以解决我的问题。

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    DataGridView 类提供了AreAllCellsSelected 方法:

    返回一个值,该值指示当前是否选择了所有 DataGridView 单元格。 (MSDN)

    有了它,我们可以获得像您的第二个这样的解决方案:

    private void dataGridView1_SelectionChanged(object sender, EventArgs e)
    {
        DataGridView view = sender as DataGridView; 
    
        if (view.AreAllCellsSelected(true))
        {
            foreach (DataGridViewRow row in view.Rows)
            {
                //deselect all invisible rows
                if (!row.Visible)
                    row.Selected = false;
            }
        }
    }
    

    【讨论】:

    • 虽然这工作正常,但我真的不想实现该事件,因为我不必检查其他选择,因为它们已经不可见。此事件捕获所有选择类型:列、行和单元格特定。除了全选按钮之外,它只会触发。如果有更有效的方法,我想使用它而不是这个,因为我认为这种方法会循环遍历所有单元格,在我的情况下这将是低效的。
    【解决方案2】:

    我终于设法解决了,解决方案比我预期的要简单。

    private void RemoveInvisibleSelection()
    {
         if (dataGridView1.SelectedRows.Count == dataGridView1.Rows.Count)
         {
             for (int i = 0; i < dataGridView1.SelectedRows.Count; i++)
                 if (!dataGridView1.SelectedRows[i].Visible)
                     dataGridView1.SelectedRows[i--].Selected = false; // decreased the index value since SelectedRows property loses an object
         }
    }
    

    【讨论】:

      猜你喜欢
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      相关资源
      最近更新 更多