ASP.NET DataGrid в повторителе
Вопрос
У меня есть таблица с двумя столбцами:
CommunityID
PersonID
И таблица «Люди», которая имеет (среди прочего):
FirstName
LastName
Я хотел бы отображать разные сетки данных для каждого сообщества, причем в каждой сетке данных будут только люди, являющиеся частью этого сообщества.Я хотел бы сделать это без использования 4 отдельных источников SqlDataSources.
Повторитель выглядит хорошим способом с DataGrid внутри ItemTemplate, но я не могу понять, как заставить его работать с разными значениями для каждого повторения.
Если у кого-нибудь есть какие-либо предложения по лучшим способам сделать это, я был бы очень признателен, поскольку это один из моих первых набегов на ASP.NET.
Спасибо,
Майк
Решение
Лично я бы не стал использовать элемент управления DataGrid, поскольку он ограничивает ваш контроль над выводом, и они были заменены более новыми. GridView
& ListView
элементы управления (хотя 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();
}
Ключ - повторитель ItemDataBound
событие — метод, вызываемый каждый раз при создании строки повторителя.Здесь вы можете привязать данные к источнику DataGrid.Вы можете поместить в этот метод любую логику, используя метод RepeaterItemEventArgs
параметр для доступа к элементу данных, который вы привязали к повторителю.