【问题标题】:Get count of selected column out of DataGridView从 DataGridView 中获取选定列的计数
【发布时间】:2011-10-03 12:57:12
【问题描述】:

我有什么:

  • 填充数据网格视图
  • 此网格的选定单元格

我想要什么:

  • 所选单元格的唯一列数
  • 这些列的名称

我发现了什么:

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++;
   }
}

这是我自己做的,不是很好,但如果有人有更好的方法来实现这一点,它可以计算列数,请随时添加

【问题讨论】:

    标签: c# .net asp.net datagridview


    【解决方案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;
    }
    

    【讨论】:

      【解决方案2】:

      您不能选择列。一次只能选择一列! 列与行相同。 还是您的意思是获取那些列,选择了哪些单元格?

      【讨论】:

        【解决方案3】:

        好的,这是获取列名的一种方式(你甚至可以使用 HeaderText 属性代替 Name):

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-10-10
          • 2020-07-09
          • 1970-01-01
          • 2013-04-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多