DataGridView-启用按ColumnHeader,RowHeader和单元格进行的选择

问题描述 投票:1回答:2

我正在尝试在DataGridView中实现excel之类的功能。因此:

  1. 如果他们选择列标题,则会选择该列
  2. 如果用户选择行标题,则将选择整个行
  3. 除此以外,如果他们选择单元格,则只会选择单个单元格。

因此,对于第三个要求,我将SelectionMode设置为CellSelect。对于列选择,我选择了列中的所有单元格,但是当我尝试打印SelectedColumns时,它打印为零。看来我也必须选择列标题。我不知道如何以编程方式选择列标题。所需的代码如下。有人可以告诉我如何实现吗?

private void dataGridViewFileData_CellMouseUp(object sender, DataGridViewCellMouseEventArgs e)
{
    dataGridViewFileData.MultiSelect = true;
    dataGridViewFileData.SelectionMode = DataGridViewSelectionMode.CellSelect;
    for (int i = 0; i < dataGridViewFileData.Rows.Count; ++i)
         dataGridViewFileData.Rows[i].Cells[0].Selected = true;
    MessageBox.Show("Selected columns:" + dataGridViewFileData.SelectedColumns.Count.ToString());
}
c# .net winforms datagridview
2个回答
2
投票

您可以将SelectionMode设置为SelectionMode,然后对单击的单元格的行索引和列索引进行CellSelect处理,并使用代码选择该单元格,全行或全列或所有单元格。

示例-通过单元格选择,列选择,行选择选择单元格

CellSelect

由于选择模式为CellClick,因此所选列或所选行为空,并且由于任何原因要跟踪所选列或所选行,则需要手动对其进行跟踪,以进行视觉反馈关于选择,您需要设置标题的颜色或对其进行绘画。

CellClick

0
投票

也许您可以尝试遍历DataGridView并检查是否已选择列中的所有单元格。然后定义一个private async void Form1_Load(object sender, EventArgs e) { dataGridView1.ColumnCount = 3; dataGridView1.RowCount = 3; dataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect; dataGridView1.CellClick += DataGridView1_CellClick; } private void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { dataGridView1.ClearSelection(); if (e.ColumnIndex == -1 && e.RowIndex == -1) dataGridView1.SelectAll(); else if (e.ColumnIndex == -1 && e.RowIndex > -1) foreach (DataGridViewCell cell in dataGridView1.Rows[e.RowIndex].Cells) cell.Selected = true; else if (e.ColumnIndex > -1 && e.RowIndex == -1) foreach (DataGridViewRow row in dataGridView1.Rows) row.Cells[e.ColumnIndex].Selected = true; else dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected = true; } 来存储这些过滤的列。

CellSelect
© www.soinside.com 2019 - 2024. All rights reserved.