统计DataGridView中选定的行数

本文关键字:DataGridView 统计 | 更新日期: 2023-09-27 18:12:12

如何在DataGridView中计算选定行的数量?

假设我突出显示了5行,我如何在消息框中显示它?

请帮助我在c#中使用WinForms !

统计DataGridView中选定的行数

需要设置YourGridView.MultiSelect=true;多选当MultiSelect属性设置为true时,可以在DataGridView控件中选择多个元素(单元格、行或列)。要选择多个元素,用户可以在单击要选择的元素时按住CTRL键。可以通过点击第一个元素来选择连续的元素,然后按住SHIFT键,点击最后一个元素来选择。

则可以使用SelectRows。Count属性SelectedRows

MessageBox.Show(yourDataGridView.SelectedRows.Count.ToString());

在VB中。NET中可以使用Lambda表达式。应该很容易翻译成C:

SelectedRowCount = DataGridView1.SelectedCells.OfType(Of DataGridViewCell)().Select(Function(x) x.RowIndex).Distinct().Count()

如果您的DataGridView允许Cell Select,您不能直接获得所选行的计数。相反,您必须遍历SelectedCells集合,以计算不同的选定行数。下面是一个函数,它将根据所选单元格返回当前所选行的计数。

    public int DataGridViewRowCount(DataGridView dgv)
    {
        Dictionary<int, int> RowsFound = new Dictionary<int, int>();
        int nCells = dgv.GetCellCount(DataGridViewElementStates.Selected);
        int nRows = 0;
        if (dgv.AreAllCellsSelected(true))
            nRows = dgv.Rows.Count;
        else
        {
            for (int i = 0; i < nCells; i++)
            {
                int rix = dgv.SelectedCells[i].RowIndex;
                if (!RowsFound.ContainsKey(rix))
                    RowsFound.Add(rix, rix);
            }
            nRows = RowsFound.Count;
        }
        return nRows;
    }

注意,对于大量的行(因此有大量的选定单元格),AreAllCellsSelected函数将让您避免迭代,只返回网格中的行数。AreAllCellsSelected的参数是一个布尔值,是否包含不可见的单元格。

在处理大量选定的单元格时,使用Dictionary而不是List来利用键索引和性能。