【问题标题】:Binding the DataSource of a repeater绑定转发器的DataSource
【发布时间】:2009-10-05 09:02:09
【问题描述】:

我正在使用数据绑定来遍历从数据库返回的记录集,其中一个记录集是以逗号分隔的项目列表 - 我正在尝试使用第二个转发器将这些项目中的每一个显示为超链接。到目前为止,这是我拥有的代码:

<asp:Repeater ID="myRepeater" runat="server" DataSource='<%# DataBinder.Eval(Container.DataItem, "SomeList").ToString().Trim(',') %>'>
<ItemTemplate>
    <a href='http://somesite/downloadattachment.aspx?itemid=<%# Container.ItemIndex %>'><%# Container.DataItem %></a>
</ItemTemplate>
</asp:Repeater>

问题在于,到目前为止,这不起作用的原因有 3 个:

  • 除非我删除 runat="server",否则我会收到 server tag is not well formed 错误 - 这是为什么呢? (为什么没有runat="server" 也能工作?)
  • Container.DataItem 评估为 System.Data.DataRowView 的实例 - 如何获取我拆分的字符串的当前片段?
  • 更重要的是,这似乎只打印出 1 Container.DataItem,即使我知道我给它的字符串中有一个逗号 - 有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

    代替 Eval(),对于非平凡的场景,我通常将 Container.DataItem 转换为我想要的类型,然后以类型安全的方式从那里对其进行操作。

    “格式不正确”错误是由 Trim() 参数周围的单引号引起的。如果您在属性定义的外部使用单引号,则不能在其中使用它们。在像您这样的数据绑定定义中有很多代码的情况下,我经常创建一个辅助方法(在脚本 runat=server 中用于 MVC 视图和其他内联代码友好的情况,或者在代码隐藏中用于传统Web 表单应用程序)处理我要运行的代码。通过重构为一个方法,它澄清了 HTML 并回避了蹩脚的单引号/双引号限制。

    无论您将代码放在哪里,在您的情况下,您都希望:

    1. 将 Container.DataItem 转换为 DataRowView
    2. 使用 [] 运算符提取 SomeList 列值
    3. 在该字符串上调用 String.Split() 将您的 CSV 字符串转换为字符串数组
    4. 将其用作内部中继器的数据源

    代码应如下所示:

    <asp:Repeater ID="myRepeater" runat="server" 
        DataSource='<%# ((System.Data.DataRowView)Container.DataItem)["SomeList"].ToString().Split(new string[] {","}, StringSplitOptions.RemoveEmptyEntries)%>'>
      <ItemTemplate>
        <a href='http://somesite/downloadattachment.aspx?itemid=<%# Container.ItemIndex %>'>
          <%# Container.DataItem %>
        </a>
      </ItemTemplate>
    </asp:Repeater>
    

    【讨论】:

    • 谢谢,这对我很有帮助,并且让我明白了很多数据绑定是如何工作的。
    【解决方案2】:

    你给sqldatasource指定updatecommand、deletecommand了吗?

    即使没有提供正确的参数,受影响的行也将始终为 0。如果更新命令有两个参数,则必须通过 updatecommand 提供两个参数。

    有关这方面的更多信息,请查看此 URL:http://www.itpian.com/Coding/4774-Data-binding.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-21
      • 2014-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多