Как привязать повторитель пользовательского веб-контроля

Я действительно запутался. Потратил на это 1 полный день, но все еще не смог исправить. Я создал веб-пользовательский элемент управления (Repeater.ascx) (с Repeater внутри), а затем перетащил его на страницу aspx (Info.aspx) вот так.

   <uc1:Repeater runat="server" ID="Repeater" />

Это код управления пользователем.

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Repeater.ascx.cs" Inherits="DBG.Website.Billing.Repeater" %>
 <asp:Repeater ID="repeaterInvoicesPaid"    OnItemCommand="ClientNameClicked" runat="server">
               <HeaderTemplate>
            <table id="PaidInvoicesTable" cellspacing="0" cellpadding="0" style="width: 100%; font-size: 11px; border-right-width: 0; border-bottom-width: 0;"
            class="dxgvControl grid dxgvTable">
                    <thead>
                        <tr>
                            <td style="width: 150px;" class="dxgvHeader">Invoice #
                            </td>
                            <td style="width: 150px;" class="dxgvHeader">Client Name
                            </td>
                            <td style="width: 150px;" class="dxgvHeader">Invoice Date
                            </td>
                            <td style="width: 150px;" class="dxgvHeader">Due Date
                            </td>
                            <td style="width: 150px;" class="dxgvHeader">Total
                            </td>
                            <td style="width: 150px;" class="dxgvHeader">Payment Method
                            </td>
                            <td style="width: 150px;" class="dxgvHeader">Status

                        </tr>
                    </thead>
              <tbody>
            </HeaderTemplate>

            <ItemTemplate>
                <tr class="dxgvDataRow">
                    <td class="dxgv">
                    <asp:Label ID="lblInvoiceID" Text='<%#Eval("InvoiceID")%>' runat="server" /> 
                    </td>
                    <td class="dxgv">
                   <asp:LinkButton ID="btnClientName"  CommandName="NameClicked"  Text='<%#Eval("ClientName")%>' CommandArgument='<%#Eval("InvoiceReapterCustomerID") %>' runat="server"/>

                    </td>

                    <td class="dxgv">
                        <asp:Label ID="lblAddedDate" Text='<%#Eval("AddedDateAndTime")%>' runat="server" />
                    </td>
                    <td class="dxgv">
                   <asp:Label ID="lblCloseDate" Text='<%#Eval("CloseDateOnly") %>' runat="server" />

                    </td>
                    <td class="dxgv">
                    <asp:Label ID="lblRecurringCharge" Text='<%#Eval("RecurringCharge") %>' runat="server" />

                    </td>
                    <td class="dxgv">
                      <asp:Label ID="lblPaymentMethodID"  Text='<%#Eval("PaymentMethodIDInvoices")%>' runat="server" />

                    </td>
          <td class="dxgv">

           <asp:Label ID="lblStatus"   ForeColor="Green"  Text=' <%#Eval("StatusType") %>' runat="server" />

          </td>
                        <td class="dxgv">

           <asp:Label ID="lblCustomerid"   Visible="false"  Text=' <%#Eval("InvoiceReapterCustomerID") %>' runat="server" />

          </td>
                </tr>
            </ItemTemplate>

   <FooterTemplate>

            </tbody> 


       </table>
        </FooterTemplate>
        </asp:Repeater>

Теперь моя проблема в том, что я хочу привязать повторитель пользовательского веб-управления внутри файла info.cs, но я не знаю, как получить пользовательский элемент управления и идентификатор повторителя на info.cs и связать его.

Примечание: мне нужно привязать ретранслятор к источнику данных (List), возвращаемому из метода info.cs.

Пожалуйста помоги . Спасибо.


person Asp_Newbie    schedule 31.10.2012    source источник


Ответы (2)


Вы можете сделать общедоступный метод в своем элементе управления и вызывать его со страницы.

В ASCX

public void BindRepeater()
{
    //.....
    repeaterInvoicesPaid.DataSource = datatableOrDataSet;
    repeaterInvoicesPaid.DataBind();
}

В ASPX

uc1.BindRepeater();
person Adil    schedule 31.10.2012
comment
ucl не распознается, он говорит, что uc1 не существует в текущем контексте. - person Asp_Newbie; 31.10.2012
comment
Вы должны указать идентификатор пользовательского элемента управления, содержащий повторитель, который вы можете увидеть в своем html. uc1 - это просто пример с идентификатором, который у вас есть для управления пользователем. - person Adil; 31.10.2012
comment
правильно. но я думаю, что элемент управления пользователя по умолчанию защищен или является частным, поэтому у меня возникает проблема с защитой доступа. как я могу сделать их общедоступными? - person Asp_Newbie; 31.10.2012
comment
Вам нужно будет изменить его спецификатор доступа, лучшим вариантом может быть общедоступный метод пользовательского управления, который будет вызываться со страницы для привязки повторителя. - person Adil; 31.10.2012
comment
Спасибо, теперь он решен ... :) последний вопрос, который мне нужно прояснить. На самом деле мне нужно использовать один и тот же пользовательский элемент управления на двух страницах aspx (скажем, info.aspx и data.aspx). Могу ли я получить доступ к событию Page_Load info.cs внутри события Page_Load data.cs.? Я спрашиваю, потому что info.cs связывает ретранслятор при загрузке страницы, поэтому мне нужно сделать то же самое для data.cs. - person Asp_Newbie; 31.10.2012
comment
Я думаю, ваша проблема решена другим ответом, вам все еще нужна помощь? - person Adil; 31.10.2012

Обычно для ванильного ASP.NET, если вы указываете идентификатор и атрибут runat = "server", вы можете получить доступ к элементу управления из кода страницы aspx. Важно получить доступ к инициализации публикации там, где создаются элементы управления - лучше всего будет в событии OnLoad.

Что вы должны помнить, так это то, что когда вы устанавливаете источник данных / источник элементов, вы должны впоследствии вызвать метод .Bind () или .DataBind (), чтобы выполнить фактическую привязку.

person Shelakel    schedule 31.10.2012