0

データベースをクエリし、結果をデータリストに返す Web アプリを作成しました。

ユーザーは、返す列を指定できます。データリストの場合、私はこれを行いました:

        <asp:DataList runat="server" ID="list">
        <ItemTemplate>
            <%# DataBinder.Eval(Container.DataItem, columns[0])%>
            &nbsp &nbsp &nbsp
            <%# DataBinder.Eval(Container.DataItem, columns[1])%>
            &nbsp &nbsp &nbsp
            <%# DataBinder.Eval(Container.DataItem, columns[2])%>
            &nbsp &nbsp &nbsp
            <%# DataBinder.Eval(Container.DataItem, columns[3]) %>
            &nbsp &nbsp &nbsp
            <%# DataBinder.Eval(Container.DataItem, columns[4]) %>
            &nbsp &nbsp &nbsp
            <%# DataBinder.Eval(Container.DataItem, columns[5]) %>
        </ItemTemplate>
    </asp:DataList>

ユーザーが返す列を 7 つ選択した場合は 6 列のみが表示され、ユーザーが返す列を 5 つ選択した場合は ArgumentOutOfRangeExpection がスローされます。

その列が必要かどうかを確認するために if ステートメントを置く方法はありますか?

ありがとう

4

1 に答える 1

0

データをデータリスト/グリッドビュー/リピーターにバインドする場合、オブジェクトのリストとして作成し、それをコントロールにバインドする方が簡単です。グリッドビューを使用した例を次に示します。

<asp:GridView ID="GridView1" runat="server" AllowSorting="False"
  AutoGenerateColumns="false" BackColor="White" 
  BorderWidth="2px" BorderStyle="Solid"
  CellPadding="4" ForeColor="#333333" GridLines="both" 
  EmptyDataText="No Log Messages">

     <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
     <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
     <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
     <Columns>                                  
       <asp:TemplateField Visible="false" ItemStyle-HorizontalAlign="Center" HeaderText="ID" HeaderStyle-ForeColor="white">
         <ItemTemplate>
            <asp:Label ID="lblId" runat="Server" Text=' <%#Eval("ID")%>' />
             </ItemTemplate>
        </asp:TemplateField>  
<asp:TemplateField Visible="false" ItemStyle-HorizontalAlign="Center" HeaderText="Address" HeaderStyle-ForeColor="white">
         <ItemTemplate>
            <asp:Label ID="lblAddress" runat="Server" Text=' <%#Eval("Address1")%>' />
             </ItemTemplate>
        </asp:TemplateField>                   
     </Columns>
 </asp:GridView>

この例では、2つの列を持つテーブルを作成します。各列は、対応するデータソースにIDとAddress1という名前の列があることを想定しています。サーバー側では、これらの名前の列を持つオブジェクトのリストを作成し、データソースをコントロールにバインドします。このような:

まず、プロパティを使用してクラスを作成します。

Public Class myClassAddress
    Public Property ID  As String
    Public Property Address1  As String
End Class

次に、グリッドビューがある場所の背後にあるコードで、そのクラスをインスタンス化して入力します。

    Dim myList As New List(Of myClassAddress)
    Dim newClass As myClassAddress

    newClass = New myClassAddress
    newClass.Address1 = "some address"
    newClass.ID = "1"
    myList.Add(newClass)

    newClass = New myClassAddress
    newClass.Address1 = "some address2"
    newClass.ID = "12"
    myList.Add(newClass)

もちろん、この例では、値をハードコーディングしているだけです。データベースやxmlファイルなどからのデータでクラスを埋めることができます。上記の例では、myClassAddressクラスの2つのインスタンスを作成します。また、これらのクラスのリストを作成し、各インスタンス化をそのリストに追加します。次に、リストをコントロールにバインドします。

me.gridView1.datasource = myList
me.gridview1.bindData()

これは大変なことのように思えるかもしれませんが、慣れれば、これらのタイプのコントロールにデータをバインドする最も簡単な方法です。ご不明な点がございましたら、お気軽にお問い合わせください。

于 2013-03-05T12:20:53.723 に答える