2013-05-04 19 views
0

抓取所選行或列的數目我有下面的代碼塊:無法在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

如果您沒有填入SelectedRows填充,您可能沒有正確的SelectionMode設置(在那裏,做到了);

必須將SelectedMode屬性設置爲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的大小。

+0

如何編輯SelectionMode屬性? – 2013-05-04 19:40:47

+0

'grid.SelectionMode'可以使用[DataGridViewSelectionMode enumerable](http://msdn.microsoft.com/en-us/library/3c89df86.aspx)中的任何值設置,但如果您對選擇模式感到滿意,已經有了,它不是上述之一,請查看我關於'SelectedCells'的說明。 – 2013-05-04 19:43:46

+0

'SelectedCells'將給出整個單元的數量。但有沒有辦法只得到選定的行數和列數? – 2013-05-04 19:46:37