0

リストから DGV を作成しようとしています。Datagridview は編集可能で、特定の列タイプが指定されています。つまり、テキストボックス、コンボボックス、チェックボックスです。

DGV.Datasource = MyList を使用すると、T のすべてのプロパティが指定された列のに DGV に追加されます。(例: Address1、County、City、ID、Address1、County、City )

Addresses = New List(Of Address)

    Dim a1 = New Address(Guid.NewGuid())
    a1.Address1 = "Address 1"
    a1.County = "County Test"
    a1.City = "My City"

    Addresses.Add(a1)

    Dim a2 = New Address(Guid.NewGuid())
    a2.Address1 = "Address 1"
    a2.County = "County Test"
    a2.City = "My City"

    Addresses.Add(a2)

    Dim a3 = New Address(Guid.NewGuid())
    a3.Address1 = "Address 1"
    a3.County = "County Test"
    a3.City = "My City"

    Addresses.Add(a3)
    uxAddresses.DataSource = Addresses

以下のようにループすると、最初の行は正常に設定されますが、行 2 または 3 は設定されません (テスト オブジェクト内)。

Private Sub DataGridViewPaint(ByVal la As List(Of Address),
                              ByVal paramDgv As DataGridView)
    Dim intDr As Integer = 0

    For Each g In la
        paramDgv.Rows(intDr).Cells("ID").Value = g.Id
        paramDgv.Rows(intDr).Cells("Address1").Value = g.Address1
        paramDgv.Rows(intDr).Cells("County").Value = g.County
        paramDgv.Rows(intDr).Cells("City").Value = g.City
        intDr += 1
    Next
End Sub

ここで何かが足りないような気がするので、これを達成するための適切な方法は何だろうと思いました....ありがとう

4

2 に答える 2

1

一度に1行ずつグリッドビューにリストを追加する必要はありません。次のように、リスト全体をグリッドビューにバインドできます。

<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>

次に、ソースをバインドします。

 Addresses = New List(Of Address)
'file the list

me.GridView1.dataSource = Addresses 
me.GridView1.DataBind()

クライアント側のグリッドビューのコード:<%#Eval( "Address1")%>が、オブジェクトのリスト内のプロパティの名前と一致していることを確認してください。

于 2013-03-04T19:13:08.287 に答える
1

DataGridViewColumn.DataPropertyName次のようにプロパティを使用してみてください。

Column1.DataPropertyName = "Address1"
Column2.DataPropertyName = "County"
Column3.DataPropertyName = "City"
Column4.DataPropertyName = "ID"

その後、設定しDGV.Datasource = MyListます。

追加の注意: すべての列のDataPropertyNameフィールドを設定する必要があります。そうしないと、列が重複してしまう可能性があります。

于 2013-03-04T21:12:31.303 に答える