【发布时间】:2014-06-16 15:35:47
【问题描述】:
我正在尝试制作一些自定义 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
}
}
}
正如您在 cmets 中看到的那样,我无法获得可以告诉我一行是否为子行的布尔值。我想我总是在演员阵容中得到默认值(假)。
我想我需要将DataGridView.Rows 集合更改为MyRow 列表而不是DataGridViewRow,这样我就可以避免强制转换。问题是我完全不知道该怎么做。我试图制作一个List<MyRow>,但由于与DataGridViewRowCollection的兼容性,这不起作用,然后我尝试从它继承,什么都没有。
我将为此提供一些示例,但我想先知道是否值得尝试。 谢谢
【问题讨论】:
标签: c# .net windows winforms datagridview