2009-10-22 3 views
3

У меня есть таблица, которая имеет два столбца:ASP.NET DataGrid в Repeater

CommunityID 
PersonID 

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

FirstName 
LastName 

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

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

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

Спасибо,

Майк

ответ

12

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

+0

+1 для подключения GridView и ListView –

+0

+1 хорошо объяснено, с хорошими примерами кода. –

+0

Я действительно не понимаю. Мне нужен мой ретранслятор, чтобы иметь источник sqlDataSource, который получает необходимое подмножество сообществ. Тогда мне нужно собрать всех людей в этом сообществе. Если я настроил свой ретранслятор с помощью SqlDataSource, я получаю сообщение об ошибке, когда пытаюсь связать его в событии Page_Load. –

Смежные вопросы