绑定转发器的DataSource

时间:2009-10-05 09:02:09

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

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

<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>

问题在于,到目前为止,有三个原因可以解决这个问题:

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

2 个答案:

答案 0 :(得分:1)

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

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

无论您将代码放在何处,在您的情况下,您希望:

  1. 将Container.DataItem强制转换为DataRowView
  2. 使用[]运算符
  3. 提取SomeList列值
  4. 在该字符串上调用String.Split()将CSV字符串转换为字符串数组
  5. 将其用作内部转发器的数据源
  6. 代码看起来像这样:

    <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>
    

答案 1 :(得分:1)

您是否为sqldatasource指定了updatecommand,deletecommand?

即使没有提供适当的参数,受影响的行也将始终为0.如果有两个参数用于update命令,则必须通过updatecommand提供两个参数。

有关详情,请查看以下网址:http://www.itpian.com/Coding/4774-Data-binding.aspx