中继器中的 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 控件,因为它限制了您对输出的控制,并且它们已被更新的 GridView
和 ListView
控件取代(尽管 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 中继器 - 获取行项_DataBound 的值