数据页面在ASPX页面的“for”循环内

时间:2012-08-20 15:06:59

标签: asp.net vb.net repeater databinder

我仍在努力了解如何利用DataBinder(Is there a way to use a DataBinder.Eval statement as an index of a specific array in an ASPX page?)。

我目前正在使用转发器构建表格,我想使用一个动态定义Item标签的循环,以允许更多的交互。

目前,此测试代码正在运行:

<asp:Repeater id="Fish" runat="server">
<table>
<ItemTemplate>
  <tr>
    <td><%# Container.DataItem("ITEM")%></td>
    <td><%# Container.DataItem("AGG")%></td>
  </tr>
</ItemTemplate>
</table>
</asp:Repeater>

但是您可以想象,这种类型的结构不允许动态选择要忽略的列中显示的列。

我在想通过使用“for”循环结构,我可以动态选择可以显示哪个列。我试过这个测试:

Public Test_id() As String
Public Test_idp As String

<% Test_id = New String() {"id", "Agg"} %>
<asp:Repeater id="Fish" runat="server">
<table>
<ItemTemplate>
  <tr>
    <% For Each Test_idp as String In Test_id%>
      <td><%# Container.DataItem(Test_idp)%></td>
    <% Next Test_idp%>
  </tr>
</ItemTemplate>
</table>
</asp:Repeater>

无效......并且由以下错误消息授予:

  

重载解析失败,因为没有公共'Item'对这些参数最具体:

     

'Public Overrides ReadOnly Property Item(name As String)As System.Object':不是最具体的。

     

'Public Overrides ReadOnly Property Item(i As Integer)As System.Object':不是最具体的。

有什么想法吗?


编辑:

回答Mike C的问题,我尝试过DataBinder.Eval(Container.DataItem, Test_idp)而不是Container.DataItem(Test_idp)。它仍然不起作用,但错误是不同的:

  

System.ArgumentNullException:value不能为null

2 个答案:

答案 0 :(得分:2)

Test_IdpObject(因为未另行声明)。

因此,编译器无法确定要调用哪些重载。

您需要明确声明As String

答案 1 :(得分:0)

您可以为列使用嵌套转发器。

<asp:Repeater id="Fish" runat="server">
<table>
<ItemTemplate>
  <tr>
    <asp:Repeater id="columns" runat="server">
        <ItemTemplate>
          <td><%# ((RepeaterItem)Container.Parent.Parent).DataItem("ITEM")%></td>
          <td><%# ((RepeaterItem)Container.Parent.Parent).DataItem("AGG")%></td>
        </ItemTemplate>
    </asp:Repeater> 
  </tr>
</ItemTemplate>
</table>
</asp:Repeater>