无法在DataGridView中获取所选列或行的数量

时间:2013-05-04 19:31:29

标签: c# .net datagrid datagridview

我有以下代码:

public double[] ExtractGridData(DataGridView grid)
    {
        numCells = grid.SelectedCells.Count;
        numberOfRows = grid.SelectedRows.Count;
        numberOfColumns = grid.SelectedColumns.Count;

        double[] cellsData = new double[numCells];

            foreach (DataGridViewCell cell in grid.SelectedCells)
            {
                if (cell.Value != null)
                    cellsData[cell.RowIndex] = Convert.ToDouble(cell.Value);
            }
            MessageBox.Show(numberOfRows.ToString());
        return cellsData;
    }

我甚至尝试使用以下代码:

Int32 selectedRowCount = grid.Rows.GetRowCount(DataGridViewElementStates.Selected);

我只得到总细胞数,坚果不是数字或选定的行或列。问题可能是什么?

1 个答案:

答案 0 :(得分:1)

如果您没有填充SelectedRows,则可能没有正确的SelectionMode设置(在那里,完成了);

  

SelectionMode属性必须设置为FullRowSelect或RowHeaderSelect,以便使用选定的行填充SelectedRows属性。

如果您需要选择列和行,而不仅仅是整个行或列,那么最好使用SelectedCells,无论选择哪个SelectionMode,都会使用{{3}}。

编辑:如果您需要所选行和列的数量,这可能有所帮助(未经测试,因为我没有方便的WIndows框)

int xsize = 0, ysize = 0;
var b = a.SelectedCells.Cast<DataGridViewCell>().ToList();
if (b.Any())
{
    ysize = b.Max(x => x.RowIndex) - b.Min(x => x.RowIndex) + 1;
    xsize = b.Max(x => x.ColumnIndex) - b.Min(x => x.ColumnIndex) + 1;
}

请注意,如果您选择(1,1)处的单个单元格和(7,7)处的另一个单元格,即使并未选择范围内的所有单元格,也会获得7x7的大小。