2010-11-16 42 views
5

我有以下类(伪):你可以将asp.net gridview绑定到基类中的字段吗?

  • 项目(INT字段1)
  • ItemDetail:项目(INT字段2,串字段3)

如果我设置ItemDetail作为数据源为asp.net gridview:

grid.DataSource = new List<ItemDetail>(); 
grid.DataBind(); 

我可以在GridView中使用Field1吗?如果是这样,那么正确的DataBinder语法是什么?下面的代码炸毁试图投射到一个项目:

<%# DataBinder.Eval(Container.DataItem, "Field1") %> 

在此先感谢您的任何帮助。

编辑:而我是一个白痴。我已经复制了gridview,并为另一个网格调用了一个RowDataBound事件处理程序......很抱歉浪费了每个人的时间,但是这里有一些很好的信息,无论任何人有同样的问题。最终,基类的公共属性绑定正确。谢谢!

+0

作为一种变通方法,我添加getter方法子类返回基地场......不能成为解决方案虽然... – IronicMuffin 2010-11-16 15:31:39

+0

IronicMuffin,我编辑使用一个代码块你的问题,而不是'pre' HTML标记(您只需要缩进4个空格或使用代码按钮) - 希望我已经得到您的标记! – 2010-11-16 15:32:24

+0

当它爆炸时,你会得到什么例外? – 2010-11-16 15:34:01

回答

1

如果您的基类属性是公共的,只要您还在子构造函数中初始化它,就不应该有问题。另外,我不确定您的示例绑定是否为伪代码,但您必须将网格绑定到IListSource,IEnumerable或IDataSource,因此您需要ItemDetails的Collection,List,IQueryable等。

+0

好点,编辑。 – IronicMuffin 2010-11-16 15:42:44

+0

这就是我的想法。有可能是别的事情就在这里...... – IronicMuffin 2010-11-16 15:44:06

+0

您可以发布有关类的一些信息?我刚刚测试了这个自己要加倍肯定,也没有问题,参考从子类的基类属性。 – jwiscarson 2010-11-16 15:45:28

-1

这将需要你的ItemDetail类有一个名为Field1的属性。其余的语法虽然很好。

<%# DataBinder.Eval(Container.DataItem, "Field1") %>

ItemDetal itemDetail = new ItemDetail(); 
itemDetail.Field1 = 100; 
  • 其中字段1是accessable财产,而不是只在类的私人领域。 这应该在网格中写出100。
+0

好吧,但重点是我想从基类中使用Field1,而不是在子类中复制它。有特殊的DataBinder语法来击中基类吗?我没有看到有关这种特殊情况的太多文件。 – IronicMuffin 2010-11-16 15:38:01

+0

如果所有的标记出现问题,你可以随时使用OnItemDataBound事件,以获得正确的价值观了。但正如jwiscarson所说,它应该是可访问的,并且记得绑定一个项目/ itemdetails列表。 – Heki 2010-11-16 15:44:32

相关问题