2011-10-03 66 views
1

的我有什麼:獲取所選列數出來的DataGridView

  • 填充datagridview的
  • 該網格的選定單元格

我想要什麼:

  • 金額所選單元格的唯一列的名稱
  • 這些列的名稱

我發現:

int selectedColumnsCount = dataGridView3.SelectedColumns.Count; 

不知怎的,這段代碼在我的情況下不能正常工作。

我的問題:如何獲得從DataGridView中選擇的列名稱和列數?

這是我現在創建:

int selectedCellCount = dataGridView3.GetCellCount(DataGridViewElementStates.Selected); 
int selectedcolumncount = dataGridView3.SelectedColumns.Count; 
ArrayList arr = new ArrayList(); 
int j = 0; 

if (selectedCellCount > 0) 
{ 
    for (int i = 0; i < selectedCellCount; i++) 
    { 
     int Xcor2 = int.Parse(dataGridView3.SelectedCells[i].ColumnIndex.ToString()); 
     test = test + dataGridView3.Columns[Xcor2].Name; 
     arr.Add(dataGridView3.Columns[Xcor2].Name); 
    } 
} 

ArrayList arr2 = new ArrayList(); 
foreach (string str in arr) 
{ 
    if (!arr2.Contains(str)) 
    { 
     arr2.Add(str); 
     j++; 
    } 
} 

這是我自己做了,不是很好,但它的努力獲得的列數,如果任何人有實現的更好的方式,隨意添加

回答

1

您可以註冊SelectionChanged事件並處理SelectedCells。例如

public Form1() 
{ 
    InitializeComponent(); 
    dataGridView1.SelectionChanged += new EventHandler(dataGridView1_SelectionChanged); 
} 

HashSet<int> column_indicies = new HashSet<int>(); 
HashSet<string> column_names = new HashSet<string>(); 
int number_of_columns = 0; 

void dataGridView1_SelectionChanged(object sender, EventArgs e) 
{ 
    column_indicies.Clear(); 
    column_names.Clear(); 
    foreach (DataGridViewCell cell in dataGridView1.SelectedCells) 
    { 
     // Set of column indicies 
     column_indicies.Add(cell.ColumnIndex); 
     // Set of column names 
     column_names.Add(dataGridView1.Columns[cell.ColumnIndex].Name); 
    } 
    // Number of columns the selection ranges over 
    number_of_columns = column_indicies.Count; 
} 
0

您無法選擇列。一次只能選擇一列! 列與行相同。 或者你是否想要獲得那些列,哪些單元格被選中?

+0

是的,我希望所選單元格的列 – Moonlight

0

好吧,這是獲得列名的方式(你甚至可以用HeaderText屬性,而不是名稱)之一:

 List<DataGridViewColumn> listOfColumns = new List<DataGridViewColumn>(); 
     foreach (DataGridViewCell cell in dataGridView1.SelectedCells) 
     { 
      DataGridViewColumn col = dataGridView1.Columns[cell.ColumnIndex] as DataGridViewColumn; 
      if (!listOfColumns.Contains(col)) 
       listOfColumns.Add(col); 
     } 
     StringBuilder sb =new StringBuilder(); 
     foreach (DataGridViewColumn col in listOfColumns) 
      sb.AppendLine(col.Name); 
     MessageBox.Show("Column names of selected cells are:\n" + sb.ToString());