DataGridView的CurrentRow.Headercell.Selected在c#中总是为false
本文关键字:false CurrentRow Headercell Selected DataGridView | 更新日期: 2023-09-27 18:10:45
Visual Studio 2010。
-
创建一个Visual c#"Window Form Application"项目
-
在表单中添加一个DataGridView组件并添加一些列
-
创建鼠标点击事件:
private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) { if (dataGridView1.CurrentRow.HeaderCell.Selected) { MessageBox.Show("Header Selected"); } if (dataGridView1.CurrentRow.HeaderCell.State != DataGridViewElementStates.None) { MessageBox.Show("Not None"); } }
-
在运行时通过单击行标头来选择行,但不显示任何MessageBox。
为什么?
要检查是否单击了行标题单元格,以下两个选项都可以:
- 处理
DataGridView
的CellClick
事件,检查e.ColumnIndex=1
是否 - 处理
DataGridView
的CellMouseClick
事件,检查e.ColumnIndex=1
是否 - 处理
DataGridView
的RowHeaderMouseClick
事件
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == -1)
MessageBox.Show(e.RowIndex.ToString());
}
private void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == -1)
MessageBox.Show(e.RowIndex.ToString());
}
private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex == -1)
MessageBox.Show(e.RowIndex.ToString());
}
为什么行标题单元格的选定属性为False?
这是这样设计的,并记录在相关msdn文档的备注部分:
DataGridViewHeaderCell。选择属性
此属性对标题单元格没有意义。
这是DataGridViewHeaderCell的选定属性的源代码,它是DataGridViewRowHeaderCell的基类,正如你所看到的,它总是返回false。
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public override bool Selected
{
get
{
return false;
}
set
{
throw new InvalidOperationException(SR.GetString("DataGridView_HeaderCellReadOnlyProperty", new object[] { "Selected" }));
}
}
我如何检查行标题单元格的其他属性?
使用HeaderCell属性,如果每一行你可以获得或设置行标题单元格的属性。例如,在上面提到的任何事件中,您可以输入这些代码:
//Set Value property, to see the value you should increase RowHeaderWidths property of DataGridView
this.dataGridView1.Rows[e.RowIndex].HeaderCell.Value = "Hi";
//Get Selected property that returns false always
MessageBox.Show(this.dataGridView1.Rows[e.RowIndex].HeaderCell.Selected.ToString());
":= "不是赋值操作符= is。
你的代码应该是
DataGridView.SelectionMode = DataGridViewSelectionMode.RowHeaderSelect;
如果你想获得rowheader,这篇文章将会很有帮助。