首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataGridView选择RowHeader或ColumnHeader

DataGridView选择RowHeader或ColumnHeader
EN

Stack Overflow用户
提问于 2013-03-27 03:00:10
回答 2查看 12.5K关注 0票数 4

我正在尝试实现一个DataGridView,它既允许通过单击行标题选择整行,也允许通过单击列标题选择整个列。

我尝试过覆盖OnColumnHeaderMouseClick函数并手动选择列。只有当我在事件发生前将SelectionMode设置为ColumnHeaderSelect时,这才起作用。

任何关于如何获得此行为的帮助都将不胜感激!

下面是我的DataGridView中的相关代码:

代码语言:javascript
复制
public class CustomDataGridView : DataGridView
{
    protected override void OnRowHeaderMouseClick(DataGridViewCellMouseEventArgs e)
    {
        this.SelectionMode = DataGridViewSelectionMode.RowHeaderSelect;
        base.OnRowHeaderMouseClick(e);
    }

    protected override void OnColumnHeaderMouseClick(DataGridViewCellMouseEventArgs e)
    {
        this.SelectionMode = DataGridViewSelectionMode.ColumnHeaderSelect;
        base.OnColumnHeaderMouseClick(e);
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-27 05:16:51

我认为您必须手动完成此操作:

代码语言:javascript
复制
protected override void OnRowHeaderMouseClick(DataGridViewCellMouseEventArgs e) {
  this.ClearSelection();
  for (int i = 0; i < this.Columns.Count; ++i) {
    this.Rows[e.RowIndex].Cells[i].Selected = true;
  }
  base.OnRowHeaderMouseClick(e);
}

protected override void OnColumnHeaderMouseClick(DataGridViewCellMouseEventArgs e) {
  this.ClearSelection();
  for (int i = 0; i < this.Rows.Count; ++i) {
    this.Rows[i].Cells[e.ColumnIndex].Selected = true;
  }
  base.OnColumnHeaderMouseClick(e);      
}

确保SelectionMode = CellSelect

票数 3
EN

Stack Overflow用户

发布于 2018-03-07 06:34:22

在这里晚了一步,但不需要手动完成(即在整个dgv中循环)。

行动非常接近你所需要的。只需捕获列和行的标题单击事件,并相应地设置SelectionMode即可。然后强制选择他们单击的任何列/行。

这使得它的功能就像Excel电子表格一样,您可以单独选择单元格,也可以通过单击标题来选择整个列/行。也可以通过按住Shift/Ctrl选择多个列/行。它还允许对整个列/行进行Shift-Space选择(取决于您所处的模式)。这与Excel类似,不同之处在于Excel允许不同的功能:按住Shift-空格键选择行,按Ctrl-空格键选择列,但是...我们不可能拥有一切。

只需确保dgv的初始SelectionMode是Column/RowHeaderSelect或CellSelect,而不是FullColumn/RowSelect,否则他们在单击列/行标题之前的第一次单击将不会起到预期的作用。

代码语言:javascript
复制
Private Sub dgvView_ColumnHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvView.ColumnHeaderMouseClick
    With dgvView
        If .SelectionMode <> DataGridViewSelectionMode.ColumnHeaderSelect Then
            .SelectionMode = DataGridViewSelectionMode.ColumnHeaderSelect
            .Columns(e.ColumnIndex).Selected = True
        End If
    End With
End Sub
Private Sub dgvView_RowHeaderMouseClick(sender As Object, e As DataGridViewCellMouseEventArgs) Handles dgvView.RowHeaderMouseClick
    With dgvView
        If .SelectionMode <> DataGridViewSelectionMode.RowHeaderSelect Then
            .SelectionMode = DataGridViewSelectionMode.RowHeaderSelect
            .Rows(e.RowIndex).Selected = True
        End If
    End With
End Sub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15645254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档