0

我仍在尝试了解如何利用 DataBinder(有没有办法使用 DataBinder.Eval 语句作为 ASPX 页面中特定数组的索引?)。

我目前正在中继器的帮助下构建表格,我想使用一个动态定义 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>

这不起作用...并由以下错误消息授予:

重载解析失败,因为没有公共“项目”对这些参数最具体:

'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:值不能为空

4

2 回答 2

2

Test_Idp是一个Object(因为没有另外声明)。

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

您需要明确声明它As String

于 2012-08-20T15:09:21.013 回答
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>
于 2012-08-20T15:17:19.070 回答