C# DataGridView的CurrentRow.Headercell.Selected在C中是否始终为false?
在VisualStudio2010中 创建Visual C窗口窗体应用程序项目 在表单上放置DataGridView组件并添加一些列 创建鼠标单击事件:C# DataGridView的CurrentRow.Headercell.Selected在C中是否始终为false?,c#,winforms,datagridview,C#,Winforms,Datagridview,在VisualStudio2010中 创建Visual C窗口窗体应用程序项目 在表单上放置DataGridView组件并添加一些列 创建鼠标单击事件: private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) { if (dataGridView1.CurrentRow.HeaderCell.Selected) { MessageBox.S
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
为什么?:=不是赋值运算符=is 你的代码应该是
DataGridView.SelectionMode = DataGridViewSelectionMode.RowHeaderSelect;
这篇文章会很有帮助。要检查您是否单击了行标题单元格,以下任一选项都可以正常工作: 处理DataGridView事件并检查e.ColumnIndex是否为1 处理DataGridView事件并检查e.ColumnIndex是否为1 DataGridView的事件处理 代码 为什么行标题单元格的选定属性为False 这是这样设计的,并记录在相关msdn文件的备注部分: 此属性对于标题单元格没有意义 下面是的选定属性的源代码,该属性是的基本计算,正如您看到的,它总是返回false
[Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public override bool Selected
{
get
{
return false;
}
set
{
throw new InvalidOperationException(SR.GetString("DataGridView_HeaderCellReadOnlyProperty", new object[] { "Selected" }));
}
}
如何检查行标题单元格的其他属性
如果可以获取或设置行标题单元格的属性,则使用属性。例如,在上面提到的任何事件中,您可以放置以下代码:
//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:=RowHeaderSelect,从DataGridView组件的属性窗口设置它。是。我试过这个。他们都做得很好。它们可以显示正确的“RowIndex”值。我非常感谢您的帮助,使用ColumnIndex=-1很好。但是,我仍然想知道为什么CurrentRow.HeaderCell.Selected不能正常工作,它总是错误的。这很有帮助!!非常感谢@如果你还考虑一个被接受的答案的投票,那就太好了,这不是强制性的,但它是合理的和推荐的:
//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());