ASP.NET DataGrid внутри повторителя - PullRequest
4 голосов
/ 22 октября 2009

У меня есть таблица с двумя столбцами:

CommunityID
PersonID

И таблица «Люди», которая имеет (среди прочего):

FirstName
LastName

Я хотел бы отобразить разные DataGrid для каждого сообщества, причем каждая сетка данных имеет только людей, которые являются частью этого сообщества. Я хотел бы сделать это без использования 4 отдельных SqlDataSources.

Повторитель выглядит неплохо, с DataGrid внутри ItemTemplate, но я не могу заставить его работать с разными значениями для каждого повторения.

Если у кого-нибудь есть какие-либо предложения по лучшим способам сделать это, я был бы очень признателен, так как это один из моих первых набегов на мир для ASP.NET

Спасибо

Mike

1 Ответ

13 голосов
/ 22 октября 2009

Лично я бы не использовал элемент управления 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 для доступа к элементу данных, который вы привязали к своему повторителю.

...