0

我有以下代码:

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);

我只得到总单元格的数量,而不是数量或选定的行或列。问题可能是什么?

4

1 回答 1

1

如果您没有被SelectedRows填充,您可能没有设置正确的 SelectionMode(去过那里,做过);

必须将 SelectionMode 属性设置为 FullRowSelect 或 RowHeaderSelect 才能使用选定的行填充 SelectedRows 属性。

如果您需要选择列和行,而不仅仅是行或整列,则最好使用SelectedCells始终填充哪个 SelectionMode 设置。

编辑:如果您需要选定的行数和列数,这可能会有所帮助(未经测试,因为我没有方便的 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 的大小。

于 2013-05-04T19:37:39.227 回答