如何在Asp.net中的Listview中绑定DataGrid?

时间:2013-01-08 17:22:20

标签: c# asp.net listview datagrid

我有以下列表视图,它有两个主要部分<table>,其中包含标签和datagrid。我使用Datatable填充字段,但我不知道如何绑定datagrid。

<asp:ListView 
ID="ListView1" 
    runat="server">
<LayoutTemplate>
   <div id="itemPlaceholderContainer" runat="server" >
    <div id="itemPlaceholder" runat="server" />
       </div>
</LayoutTemplate>
  <ItemTemplate>
<asp:Panel runat="server">
    <table align="center">
        <tr>
            <td>
               <cc1:SWCLabel runat="server" 
                   Text='<%# Eval("field1") %>'
               />
             </td>
             <td>
                 <cc1:SWCLabel runat="server" 
                     Text='<%# Eval("field2") %>'
                 />
             </td>
        </tr>
    </table>

  <asp:DataGrid ID="datagrid_1" runat="server">
        <Columns>
            <asp:BoundColumn  DataField="col1" HeaderText="column1 ">
            </asp:BoundColumn>
            <asp:BoundColumn  DataField="col2" HeaderText="column2 ">
            </asp:BoundColumn>
        </Columns>
    </cc1:SWCDataGrid>
  </asp:Panel>                            
 </ItemTemplate>
</asp:ListView>

我的代码隐藏:

DataTable table = new DataTable();
// GET DATA
// . . .
ListView1.DataSource = table;
ListView1.DataBind();

2 个答案:

答案 0 :(得分:0)

因为你的gridview在项目模板中, 在列表视图的“项目数据绑定”事件上执行此操作。

答案 1 :(得分:0)

如果您对我们的数据结构有所了解,我认为这会有所帮助。所以你试图为ListView的每个元素显示一个DataGrid。对我而言,这意味着ListView的每个元素都有一组需要在其自己的DataGrid中显示的相关数据。要做到这一点,除了Listview DataBind代码之外,还需要以下内容:(在VB中,应该很容易用到C#中)

Protected Sub ListView1_ItemDataBound(ByVal sender As Object, ByVal e As   System.Web.UI.WebControls.ListViewItemEventArgs) Handles ListView1.ItemDataBound

        Dim theDataGrid As DataGrid = e.Item.FindControl("datagrid_1")

        Dim itemData As DataTable = GetTheItemData(e.Item.DataItem)

        theDataGrid.DataSource = itemData 
        theDataGrid.DataBind()          

 End Sub

每次列表视图的Item为DataBound时,都会调用此处理程序。每次获取该项目的相关数据,并使用它来填充该项目的DataGrid。