中继器中的 ASP.NET DataGrid

Posted

技术标签:

【中文标题】中继器中的 ASP.NET DataGrid【英文标题】:ASP.NET DataGrid within a Repeater 【发布时间】:2010-12-08 22:49:01 【问题描述】:

我有一个包含两列的表格:

CommunityID
PersonID

还有一个“人”表,其中包含(除其他外):

FirstName
LastName

我想为每个社区显示不同的 DataGrid,每个 datagrid 只有属于该社区的人。我想在不使用 4 个单独的 SqlDataSource 的情况下执行此操作。

Repeater 看起来是个不错的方法,在 ItemTemplate 中有一个 DataGrid,但我似乎无法确定让它与每次重复的不同值一起工作的正面或反面。

如果有人对更好的方法有任何建议,我将非常感激,因为这是我第一次涉足 ASP.NET 世界

谢谢,

迈克

【问题讨论】:

【参考方案1】:

我个人不会使用 DataGrid 控件,因为它限制了您对输出的控制,并且它们已被更新的 GridViewListView 控件取代(尽管 DataGrid 是 not obsolete,所以请随意使用如果你愿意的话)。您可能需要考虑使用替代方案,但您不需要这样做。

要执行您要查找的操作,您需要使用如下标记:

<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事件,就是每次创建repeater行时调用的方法。您可以在此处对 DataGrid 源进行数据绑定。您可以使用RepeaterItemEventArgs 参数将您需要的任何逻辑放入此方法中,以访问您绑定到中继器的数据项。

【讨论】:

我不太明白。我需要我的转发器有一个 sqlDataSource 作为源,它获取所需的社区子集。然后我需要让那个社区的所有人都参与进来。如果我使用 SqlDataSource 设置我的转发器,当我尝试在 Page_Load 事件中绑定它时会出现错误。 啊,我想通了。感谢您的及时回复,它完全符合我的需要。 +1,并被接受。

以上是关于中继器中的 ASP.NET DataGrid的主要内容,如果未能解决你的问题,请参考以下文章

groupname 在中继器 asp.net 中的多个单选按钮中不起作用

Telerik Radlistview 与嵌套的 ASP.NET 中继器

在 asp.net 中用于图像中继器控制的 css 模板

asp.net 中继器 - 获取行项_DataBound 的值

ASP.NET 中继器交替行突出显示没有完整的 <alternatingitemtemplate/>

ASP.NET - 在 RenderContent 调用中将事件处理程序添加到中继器内的 LinkBut​​ton