【问题标题】:Custom DataGridViewRow issue: Getting custom property is always default value (false)自定义 DataGridViewRow 问题:获取自定义属性始终是默认值 (false)
【发布时间】: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&lt;MyRow&gt;,但由于与DataGridViewRowCollection的兼容性,这不起作用,然后我尝试从它继承,什么都没有。

我将为此提供一些示例,但我想先知道是否值得尝试。 谢谢

【问题讨论】:

    标签: c# .net windows winforms datagridview


    【解决方案1】:

    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;
        }
    }
    

    【讨论】:

    • 谢谢,以后知道怎么做就好了。但是,我通过添加另一个名为 DataGridViewRowChild 的类并测试(行是 DataGridViewRowChild)解决了这个问题,这很有效。我需要该类与行父级不同,因为它们将具有不同的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 2011-03-09
    • 2013-05-30
    • 2018-08-01
    相关资源
    最近更新 更多