【问题标题】:How do I bind an ASP.NET FormView to a single record?如何将 ASP.NET FormView 绑定到单个记录?
【发布时间】:2010-11-10 07:51:40
【问题描述】:

ASP.NET FormView 控件的全部目的是一次显示一条记录。那么如何将它绑定到单个记录?它抱怨

数据源是无效类型。它必须是 IListSource、IEnumerable 或 IDataSource。

如果这是唯一的解决方案,我可以将我的对象包装在一个列表中。在此应用程序中,FormView 位于用户控件内,并且我在公共方法中检索对象,即我没有使用数据源控件。我也没有在这里做任何 2 路数据绑定,我只是在这种情况下使用 FormView 来保持一致的外观。

如果我通过书并将 FormView 绑定到返回记录列表的数据源,它实际上会检索所有记录并仅显示所选记录吗?

这是我最终在实用程序类中实现的:

public static IEnumerable<T> WrapInEnumerable<T>(T item)
{
    return new T[] {item};
}

【问题讨论】:

  • 当我尝试在我的 Linq2Sql 实体上实现它时,它仍然在将其转换为数组时抛出错误。我尝试了 Sani Huttunen 的 List 想法,并且成功了。
  • GOTCHA:如果您手动设置 .DataSource 属性,那么不要忘记下一行的 .DataBind() !当我没有遇到错误但没有显示数据时,让我挠了几分钟。事后看来很明显,但我通常使用 ObjectDataSource,所以它对我没有启发
  • 我自己只是使用了这个,但有一点不同。我通过将T item 更改为this T item 将其转换为扩展方法。谢谢你的好主意。

标签: asp.net data-binding


【解决方案1】:

正如错误消息所说,DataSource 对象必须实现 IListSource、IEnumerable 或 IDataSource 才能工作。

如果您有一个未实现上述接口之一的对象 av 类型 A,那么您可以按照您的说法将您的对象包装在一个列表中:

C#

var myDataSource = new List<A> {myObject};

VB.NET

Dim myDataSource As List(Of A)(myObject)

【讨论】:

  • 感谢您的确认。这是一个伪装成问题的咆哮。并不是说它对一个项目有很大的影响,但是将它包装在一个数组中可能更有效。
  • 同意咆哮。这是愚蠢的。该控件设计为显示单个项目,您应该可以直接绑定该对象。
猜你喜欢
  • 2011-01-14
  • 1970-01-01
  • 2015-05-22
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 2017-12-12
相关资源
最近更新 更多