2011-10-03 61 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());