ASP.NET - Репитер в Репитере?

DmTs
Удалён за грубость
Posts: 5791
Joined: 15 Mar 1999 10:01
Location: с Родины

ASP.NET - Репитер в Репитере?

Post by DmTs »

Надо сделать типа информации о матчах.
Примерно такой вид:

------------------------------------------------
| Спартак | 2 | 2 | Динамо |
------------------------------------------------
| Петров 67 | Cмирнов 25 |
| Иванов 74 | Васильев 81 |
-------------------------------------------------

И таких блоков несколько подряд - по всему туру.
Думал сделать через вложенные репитеры:

Команды и счет - Первый репитер, авторы голов и минуты - вложенные в него, примерно так:

Code: Select all

<table width="100%" border=1>
<asp:Repeater
  ID="rptGameInfo"
  Runat="Server">
<ItemTemplate>
<tr>
<td width="50%" align="center">
<b><%# Container.DataItem("Home")%></b>
      <asp:Repeater
           ID="rptHomeGoals"
          Runat="Server">
         <ItemTemplate>
              <%# Container.DataItem("Name")%><br>
          </ItemTemplate>
         </asp:Repeater>
</td>
<td width="50%" align="center">
<b><%# Container.DataItem("Visitor") %></b>
</td>
</tr>
</ItemTemplate>
</asp:Repeater>
</table>


Биндится это дело так (вот тут сильно не уверен!).

Cначала биндится rptGameInfo

Code: Select all

  ....
        cmdSelect = New SqlCommand(strSelect, ConDB )
        dtrGameInfo = cmdSelect.ExecuteReader()
        rptGameInfo.DataSource=dtrGameInfo
        rptGameInfo.DataBind()
        dtrGameInfo.Close()


' И вызываем биндинг репитера к примеру для хозяев:

Code: Select all

   Call BindHomeRoster(txtHome.Text) ' Команда записана еще в одном текстбоксе


И далее:

Code: Select all

 Sub BindHomeRoster(TeamName as String)
         ....
         cmdSelect = New SqlCommand(strSelect, ConDB )
   
         dtrRoster = cmdSelect.ExecuteReader()
         rptHomeGoals.DataSource=dtrRoster
         rptHomeGoals.DataBind()
         dtrRoster.Close()
          ...
         


Вот на этой строке:

rptHomeGoals.DataSource=dtrRoster

Compilation Error
rptHomeGoals is not declared

Если я выношу этот репитер из главного и ставлю отдельно - все ок. Но так мне не нужно.
Как сделать?
"Имеешь одни часы - знаешь который час. Имеешь несколько - сомневаешься."
Niky
Уже с Приветом
Posts: 550
Joined: 31 Mar 2000 10:01
Location: Moscow --> Baltimore, MD

Post by Niky »

Вот так:

Code: Select all

private void BindHomeRoster(string TeamName, Repeater rptHomeGoals) 
{
         ....
         cmdSelect = new SqlCommand(strSelect, ConDB )
   
         dtrRoster = cmdSelect.ExecuteReader()
         rptHomeGoals.DataSource=dtrRoster
         rptHomeGoals.DataBind()
         dtrRoster.Close()
}

private void rptGameInfo_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
     ...
         Repeater rptGoals = e.Item.FindControl("rptHomeGoals") as Repeater;
         if(rptGoals != null)
         {
             BindHomeRoster(teamName, rptGoals);
         }
     ...
}

Return to “Вопросы и новости IT”