![](/img/trans.png)
[英]How to update the target cell of a CurrentRow in DataGridView in C#?
[英]CurrentRow.Headercell.Selected of DataGridView always be false in C#?
在Visual Studio 2010中。
创建一个Visual C#“窗口窗体应用程序”项目
将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.Selected属性
此属性对于标题单元格没有意义。
这里是Selected属性的源代码DataGridViewHeaderCell这是基本CALSS 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());
“:=”不是赋值运算符=是。
并且您的代码应该是
DataGridView.SelectionMode = DataGridViewSelectionMode.RowHeaderSelect;
如果您想获得rowheader,这篇文章会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.