自定义DataGridViewRow问题:获取自定义属性始终是默认值(false)
本文关键字:默认值 false 问题 DataGridViewRow 获取 自定义属性 自定义 | 更新日期: 2023-09-27 18:01:00
我正在尝试制作一些自定义的DataGridViewRow
以用于样式设置,并实现一个自定义的展开/折叠行系统。
我试过一个基本的行类骨架,如下所示:
class MyRow : DataGridViewRow
{
public Boolean IsChild;
}
还有一个像这样的自定义DataGridView
:
public partial class MyGrid : DataGridView
{
public MyGrid()
{
InitializeComponent();
RowTemplate = new MyRow();
}
}
然后在我的Form
中,我像这样使用它:
public Form1()
{
InitializeComponent();
myGrid1.Rows.Add(new MyRow());
myGrid1.Rows.Add(new MyRow() { IsChild = true });
myGrid1.Rows.Add(new MyRow() { IsChild = true });
for (int i = 0; i < myGrid1.RowCount; i++)
{
MyRow r;
if (myGrid1.Rows[i] is MyRow)
{
MessageBox.Show(":)");
r = (MyRow)myGrid1.Rows[i]; // r = myGrid1.Rows[i] as MyRow;
}
else
{
continue; // It's ok, we never run this part
}
if (r.IsChild) // Never true
{
r.Visible = false;
MessageBox.Show(":C"); // Never prints this
}
}
}
正如你在评论中看到的,我无法获得布尔值来告诉我一行是否为子行。我想在转换过程中我总是得到默认值(false(。
我想我需要将DataGridView.Rows
集合更改为MyRow
的列表,而不是DataGridViewRow
,这样我就可以避免强制转换。问题是我不知道该怎么做。我试图制作一个List<MyRow>
,但由于与DataGridViewRowCollection
兼容,它不起作用,然后我试图从中继承,什么都没有。
我会提供一些例子,但我想先知道是否值得一试。感谢
从MSDN中,从DataGridViewRow
派生并向派生类添加新属性时,您需要覆盖Clone
方法,以便在克隆操作期间复制新属性。
我刚刚测试了你的代码,添加了克隆方法后它运行良好。
class MyRow : DataGridViewRow
{
public bool IsChild { get; set; }
public override object Clone()
{
var clonedRow = base.Clone() as MyRow;
clonedRow.IsChild = this.IsChild;
return clonedRow;
}
}