【问题标题】:Can you databind an asp.net gridview to a field in a base class?您可以将 asp.net gridview 数据绑定到基类中的字段吗?
【发布时间】:2010-11-16 15:26:51
【问题描述】:

我有以下类(伪代码):

  • 项目(int Field1)
  • ItemDetail:项目(int Field2,字符串 field3)

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

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

我可以在 GridView 中使用 Field1 吗?如果是这样,正确的 DataBinder 语法是什么?以下代码在尝试强制转换为项目时失败了:

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

提前感谢您的帮助。

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

【问题讨论】:

  • 作为一种解决方法,我向返回基字段的子类添加了 getter...虽然这不是解决方案...
  • IronicMuffin,我使用代码块而不是pre HTML 标记编辑了您的问题(您只需要缩进 4 个空格或使用代码按钮) - 希望我的标记正确!
  • 当它爆炸时,你会得到什么异常?
  • 无法将“ItemDetail”类型的对象转换为“Item”类型。

标签: c# asp.net data-binding gridview


【解决方案1】:

如果您的基类属性是公共的,那么只要您还在子构造函数中对其进行初始化,就不会有问题。

另外,我不确定您的示例绑定是否是伪代码,但是您必须将网格绑定到 IListSource、IEnumerable 或 IDataSource,因此您需要 ItemDetails 的 Collection、List、IQueryable 等。

【讨论】:

  • 你能发布一些关于课程的信息吗?我只是自己对此进行了测试,以确保从子类中引用基类属性没有问题。
【解决方案2】:

这将要求您的 ItemDetail 类有一个名为 Field1 的属性。不过其余的语法都很好。

&lt;%# DataBinder.Eval(Container.DataItem, "Field1") %&gt;

ItemDetal itemDetail = new ItemDetail();
itemDetail.Field1 = 100;
  • 其中 Field1 是可访问的属性,而不仅仅是类中的私有字段。 这应该在您的网格中写出 100。

【讨论】:

  • 嗯,是的,但关键是我想使用基类中的 Field1,而不是在子类中复制它。是否有特殊的 DataBinder 语法来命中基类?我没有看到太多关于这种特殊情况的文档。
  • 如果标记出现问题,您始终可以使用 OnItemDataBound 事件来获取正确的值。但正如 jwiscarson 所说,它应该是可访问的,并记得绑定项目/项目详细信息列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-21
相关资源
最近更新 更多