我正在尝试实现一个DataGridView,它既允许通过单击行标题选择整行,也允许通过单击列标题选择整个列。
我尝试过覆盖OnColumnHeaderMouseClick函数并手动选择列。只有当我在事件发生前将SelectionMode设置为ColumnHeaderSelect时,这才起作用。
任何关于如何获得此行为的帮助都将不胜感激!
下面是我的DataGridView中的相关代码:
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);
}
}发布于 2013-03-27 05:16:51
我认为您必须手动完成此操作:
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
发布于 2018-03-07 06:34:22
在这里晚了一步,但不需要手动完成(即在整个dgv中循环)。
行动非常接近你所需要的。只需捕获列和行的标题单击事件,并相应地设置SelectionMode即可。然后强制选择他们单击的任何列/行。
这使得它的功能就像Excel电子表格一样,您可以单独选择单元格,也可以通过单击标题来选择整个列/行。也可以通过按住Shift/Ctrl选择多个列/行。它还允许对整个列/行进行Shift-Space选择(取决于您所处的模式)。这与Excel类似,不同之处在于Excel允许不同的功能:按住Shift-空格键选择行,按Ctrl-空格键选择列,但是...我们不可能拥有一切。
只需确保dgv的初始SelectionMode是Column/RowHeaderSelect或CellSelect,而不是FullColumn/RowSelect,否则他们在单击列/行标题之前的第一次单击将不会起到预期的作用。
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 Subhttps://stackoverflow.com/questions/15645254
复制相似问题