繁体   English   中英

c# windows 表单应用中将通用列表项绑定到不同网格

[英]Binding items of generic list to different grids in c# windows form application

我创建了以下类:

public interface ISFRDataSet
    {
    }

    public interface ISFRStaticDataSet : ISFRDataSet
    {
    }

    public interface ISFRTransientDataSet : ISFRDataSet
    {
    }


    public class DataSet0 : ISFRStaticDataSet
    {
        public int Id { get; set; }

        public string Text { get; set; }
    }

    public class DataSet1 : ISFRStaticDataSet
    {
    }

    public class DataSet2 : ISFRStaticDataSet
    {
    }

    public class DataSet3 : ISFRTransientDataSet 
    {
    }

然后我创建了一个 ISFRDataSet 列表,并向其中添加了 DataSet1、2 和 3 的实例。

Dictionary<string, List<ISFRDataSet>> dsList = new Dictionary<string, List<ISFRDataSet>>();
            dsList.Add("DataSet1", GetDataSet1Data(segmentId));
            dsList.Add("DataSet2", GetDataSet2Data(segmentId));
            dsList.Add("DataSet3", GetDataSet3Data(segmentId));
...

这个列表被发送到一个表单,表单在列表中的每个 ISFRDataSet object 上迭代; 为每个创建一个网格,并将 object 绑定到网格。

我期望 DataSet1、2 和 3 的公共属性将显示在每个网格中的列中。 但是没有显示任何列,我假设是因为 ISFRDataSet 接口没有任何属性。 有没有办法实现我的预期?

谢谢

您可以使用这个特殊的关键字dynamic来绑定 gridview 的数据源。

像这个可行的代码和所有网格将生成列。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        Dictionary<string, List<ISFRDataSet>> dsList = new Dictionary<string, List<ISFRDataSet>>();
        dsList.Add("DataSet1", GetDataSet1Data());
        dsList.Add("DataSet2", GetDataSet2Data());
        dsList.Add("DataSet3", GetDataSet3Data());

        var list1 = new BindingList<dynamic>(DataSetConverter(dsList["DataSet1"]));
        dataGridView1.DataSource = list1;

        var list2 = new BindingList<dynamic>(DataSetConverter(dsList["DataSet2"]));
        dataGridView2.DataSource = list2;

        var list3 = new BindingList<dynamic>(DataSetConverter(dsList["DataSet3"]));
        dataGridView3.DataSource = list3;
    }

    private List<dynamic> DataSetConverter<TSource>(List<TSource> source) where TSource : class, ISFRDataSet
    {
        return source.Cast<dynamic>().ToList();
    }


    private List<ISFRDataSet> GetDataSet3Data()
    {
        return new List<DataSet3>
        {
            new DataSet3
            {
                CreateTime = DateTime.Now.AddDays(1),
                Name = "TN1"
            },
            new DataSet3
            {
                CreateTime = DateTime.Now.AddDays(3),
                Name = "TN2"
            }
        }.Cast<ISFRDataSet>().ToList();
    }

    private List<ISFRDataSet> GetDataSet2Data()
    {
        return new List<DataSet2>
        {
            new DataSet2
            {
                ProductId = 1,
                Price = 5.5M
            },
            new DataSet2
            {
                ProductId = 2,
                Price = 6.6M
            }
        }.Cast<ISFRDataSet>().ToList();
    }

    private List<ISFRDataSet> GetDataSet1Data()
    {
        return new List<DataSet1>
        {
            new DataSet1
            {
                TestId = 1,
                TestText = "t1"
            },
            new DataSet1
            {
                TestId = 2,
                TestText = "t2"
            }
        }.Cast<ISFRDataSet>().ToList();
    }
}


public interface ISFRDataSet
{
}

public interface ISFRStaticDataSet : ISFRDataSet
{
}

public interface ISFRTransientDataSet : ISFRDataSet
{
}


public class DataSet0 : ISFRStaticDataSet
{
    public int Id { get; set; }

    public string Text { get; set; }
}

public class DataSet1 : ISFRStaticDataSet
{
    public int TestId { get; set; }
    public string TestText { get; set; }
}

public class DataSet2 : ISFRStaticDataSet
{
    public int ProductId { get; set; }
    public decimal Price { get; set; }
}

public class DataSet3 : ISFRTransientDataSet
{
    public string Name { get; set; }
    public DateTime CreateTime { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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