我仍在努力了解如何利用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
答案 0 :(得分:2)
Test_Idp
是Object
(因为未另行声明)。
因此,编译器无法确定要调用哪些重载。
您需要明确声明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>