你能将一个 ASP.NET GridView 绑定到基类中的一个字段吗?

5

我有以下类(伪代码):

  • 物品(int Field1)
  • 物品明细:物品(int Field2,string field3)

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

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

我可以在GridView中使用Field1吗?如果可以,正确的DataBinder语法是什么?以下代码尝试将其转换为Item时会出错:

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

提前感谢任何帮助。

编辑:而且我很蠢。我复制了GridView并为另一个网格调用了RowDataBound事件处理程序...抱歉浪费大家的时间,但是如果有人有同样的问题,这里确实有一些好信息。最终,基类的公共属性正确地绑定了。谢谢!


作为一种解决方法,我在子类中添加了getter方法来返回基础字段...虽然这不是最终解决方案... - IronicMuffin
IronicMuffin,我使用代码块而不是 pre HTML 标签编辑了你的问题(你只需要缩进 4 个空格或使用代码按钮)- 希望我已经正确标记了你的内容! - Graham Clark
当它崩溃时,你会得到什么异常? - Graham Clark
无法将类型为“ItemDetail”的对象强制转换为类型“Item”。 - IronicMuffin
2个回答

1
如果您的基类属性是公共的,并且您在子构造函数中进行了初始化,那么您不应该遇到任何问题。
另外,我不确定您的绑定示例是否为伪代码,但是您必须将网格绑定到IListSource、IEnumerable或IDataSource,因此您需要一个ItemDetails的Collection、List、IQueryable等。

你能发布一些关于类的信息吗?我刚刚自己测试了一下,以确保没有问题从子类引用基类属性。 - jwheron

-1
那需要你的ItemDetail类有一个名为Field1的属性。语法其余部分都是正确的。 <%# DataBinder.Eval(Container.DataItem, "Field1") %>
ItemDetal itemDetail = new ItemDetail();
itemDetail.Field1 = 100;
  • 其中Field1是一个可访问的属性,而不仅仅是您类中的私有字段。这将在您的网格中写出100。

是的,但重点是我想使用基类中的Field1,而不是在子类中重复定义。是否有特殊的DataBinder语法可以访问基类?我没有看到太多关于这种情况的文档。 - IronicMuffin
如果标记出现问题,您可以始终使用OnItemDataBound事件来获取正确的值。但正如jwiscarson所说,它应该是可访问的,并记得绑定项目/项目详细信息列表。 - Heki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接