我有一个基类和2个继承的类。根据应用程序的配置,必须将Customer1或Customer2绑定到XtraGrid:
public abstract class MyBase
{
public int ItemID { get; set; }
}
public class Customer1 : MyBase
{
public string Name { get; set; }
public DateTime BirthDate { get; set; }
}
public class Customer2 : MyBase
{
public string Name { get; set; }
}
现在,绑定代码:
Customer1 c1 = new Customer1();
c1.ItemID = 1;
c1.Name = "N1";
c1.BirthDate = DateTime.Now;
BindingList<MyBase> tmpList = new BindingList<MyBase>();
tmpList.Add(c1);
gridControl1.DataSource = tmpList;
但是grid只显示从MyBase类派生的ItemID字段。
你能帮忙吗?
感谢。
答案 0 :(得分:1)
简单的答案是 - 你做不到。这不是List<T>
特有的,而是针对使用列表数据绑定的所有控件。当您使用BindingList<T>
,IList<T>
等时,将提取typeof(T)并将其用作项类型以检索可绑定属性。请注意,这些类(以及一般BindingList<Customer1>
)都不支持方差,因此您不能将基类用作通用参数。只需在实例化您计划用作数据源的List / BindingList时使用具体类(在您的情况下为BindingList<Customer2>
或var i;
for (i = 1; i <= lastRowID; i++;)
{
var element = document.getElementById('txtName'+i);
if (typeof(element) != 'undefined' && element != null)
{
// control with this ID exists.
} else {
// control with this ID does NOT exist, SKIP it.
}
}
)。
答案 1 :(得分:0)
您只在网格中看到ItemID
字段,因为您已将基类MyBase
添加为BindingList
的类型。
您应该在代码中将BindingList
的类型更改为Customer1
或Customer2
。
Customer1 c1 = new Customer1();
c1.ItemID = 1;
c1.Name = "N1";
c1.BirthDate = DateTime.Now;
BindingList<Customer1> tmpList = new BindingList<Customer1>();
tmpList.Add(c1);
gridControl1.DataSource = tmpList;
使用基类MyBase
将Customer类上的视图限制为基类中可用的内容。因此,网格只能看到ItemID
字段。
您将无法将Customer1
和Customer2
类型的集合绑定到网格中。您需要重新考虑您的解决方案。您可以创建一个包含Customer1
和Customer2
中所有字段的类(让我们调用此Customer
),并添加一个设置客户类型的附加字段(可能是枚举)(即。客户1或客户2)。然后你可以像这样创建一个绑定:
public enum CustomerType
{
Customer1,
Customer2
}
public class Customer
{
public int ItemID { get; set; }
public string Name { get; set; }
public DateTime BirthDate { get; set; }
public CustomerType Type {get; set; }
}
Customer c = new Customer();
c.ItemID = 1;
c.Name = "N1";
c.BirthDate = DateTime.Now;
c.Type = CustomerType.Customer1;
BindingList<Customer> tmpList = new BindingList<Customer>();
tmpList.Add(c);
gridControl1.DataSource = tmpList;
然后,您的网格将能够显示您感兴趣的所有字段。
答案 2 :(得分:0)
感谢您的时间。
我刚试过UnBound列类型并解决了问题。