开发者

Get count of selected column out of DataGridView

开发者 https://www.devze.com 2023-04-10 12:29 出处:网络
What do I have: Filled datagridview Selected cells of this grid What do I want: Amount of unique columns of the selected cells

What do I have:

  • Filled datagridview
  • Selected cells of this grid

What do I want:

  • Amount of unique columns of the selected cells
  • Names of these columns

What I found:

int selectedColumnsCount = dataGridView3.SelectedColumns.Count;

Somehow this piece of code isn't working in my case.

My question: How can I get the columns name and the amount of columns selected out of a DataGridView?

This is what I created now:

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

This is what I made myself, not that nice but its working to get the count of columns if anyone has a better way of realizing this开发者_如何学运维, feel free to add


You can register for the SelectionChanged event and process the SelectedCells. For example

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


You cannot select columns. Only one columns can be selected at a time! Columns are the same as Rows. Or did you mean to get those columns, which cells are slected?


Ok, this is one of the way of getting column names (you can even use HeaderText property instead of 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());
0

精彩评论

暂无评论...
验证码 换一张
取 消