0

私はまだ DataBinder をどのように利用できるかを理解しようとしています ( ASPX ページの特定の配列のインデックスとして DataBinder.Eval ステートメントを使用する方法はありますか? )。

現在、リピーターを使用してテーブルを作成しています。アイテム ラベルを動的に定義するループを使用して、より多くの対話を可能にしたいと考えています。

現在、このテスト コードは機能しています。

<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 'Item' がないため、オーバーロードの解決に失敗しました:

「Public Overrides ReadOnly Property Item(name As String) As System.Object」: 最も具体的ではありません。

「Public Overrides ReadOnly Property Item(i As Integer) As System.Object」: 最も具体的ではありません。

何か案が?


編集:

マイク C の質問に答えるために、DataBinder.Eval(Container.DataItem, Test_idp)代わりに試してみましたContainer.DataItem(Test_idp)。それでも機能しませんが、エラーは異なります。

System.ArgumentNullException: 値を null にすることはできません

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 に答える