繁体   English   中英

在C#中,DataGridView的CurrentRow.Headercell.Selected始终为false吗?

[英]CurrentRow.Headercell.Selected of DataGridView always be false in C#?

在Visual Studio 2010中。

  1. 创建一个Visual C#“窗口窗体应用程序”项目

  2. 将DataGridView组件放在窗体上并添加一些列。

  3. 创建鼠标单击事件:

     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"); } } 
  4. 通过在运行时单击行标题选择一行,但从不显示任何MessageBox。

这是为什么?

要检查是否单击了行标题单元格,可以使用以下两个选项之一:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM