![](/img/trans.png)
[英]DataGridView: c# generic UserDeletingRow for multiple grids on same form
[英]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.