ASP.NET中的Repeater内嵌DataGrid

4

我有一个包含两列的表:

CommunityID
PersonID

还有一个“People”表格,其中包含(除其他内容外):

FirstName
LastName

我想为每个社区显示一个不同的数据网格,每个数据网格仅包含该社区的成员。我希望能够在不使用4个单独的SqlDataSources的情况下完成此操作。
Repeater看起来是一个很好的选择,可以在ItemTemplate中放置DataGrid,但我似乎无法理解如何将其与每个重复值一起使用。
如果有人对更好的方法有建议,我将非常感激,因为这是我首次涉足ASP.NET世界。
谢谢,
迈克
1个回答

13
个人而言,我不会使用DataGrid控件,因为它会限制您对输出的控制权,并且已被新的GridViewListView控件替代(尽管DataGrid未过时,因此如果您想要使用它,请随意使用)。您可能希望考虑使用这些替代方案,但并非必须这样做。
要实现您想要的功能,您需要像以下示例一样的标记:
<asp:Repeater runat="server" ID="myRepeater" 
              onitemdatabound="Repeater_ItemDataBound">
<ItemTemplate>
    <asp:DataGrid runat="server" ID="myDataGrid">
    </asp:DataGrid>
</ItemTemplate>
</asp:Repeater>

然后,您将使用以下代码将标记与代码后端连接起来:

protected void Page_Load(object sender, EventArgs e)
{
    myRepeater.DataSource = new Object[0];
    myRepeater.DataBind();
}

protected void Repeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    DataGrid dg = (DataGrid)e.Item.FindControl("myDataGrid");
    object o = e.Item.DataItem;// Cast the DataItem as whatever 
                               // your Repeater's DataSource is

    // ...
    // Do whatever you need to get the 
    // data source for your DataGrid here
    // ...

    dg.DataSource = DataGridSourceObjectHere;
    dg.DataBind();
}

重点是Repeater的ItemDataBound事件,这是每次创建重复器行时调用的方法。这是您可以绑定数据网格源的位置。您可以在此方法中使用RepeaterItemEventArgs参数放置任何所需的逻辑,以访问绑定到重复器的数据项。

我并不是很明白。我需要我的中继器作为源具有 sqlDataSource,该数据源获取所需子社区的子集。然后我需要获得该社区中的所有人。如果我使用 SqlDataSource 设置我的中继器,则在尝试在 Page_Load 事件中绑定时会出现错误。 - Mike Trpcic
啊,我想通了。谢谢及时回复,它正好满足了我的需求。+1,并已采纳。 - Mike Trpcic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接