C# DataGridView的CurrentRow.Headercell.Selected在C中是否始终为false?

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

在VisualStudio2010中

创建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


为什么?

:=不是赋值运算符=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());