Asp.Net / C# - Как да получите текста на контрола на етикета, вложен вътре в повторител?

Опитвам се да получа текста на моя етикет, който е вътре в повторител, но продължавам да получавам NullPointerException.

Всички данни идват от база данни и идват правилно.

Когато щракна върху LinkButton, искам да използвам текста на етикета за следващия битов код.

Aspx страница:

   <asp:Repeater ID="RepeaterDepartmentParent" runat="server">
       <ItemTemplate>
                <div id="outerDiv" class="col-lg-3 col-xs-6" runat="server">
                        <!-- small box -->
                        <div>
                            <div class="inner">

                                <p>
                                   <%# DataBinder.Eval(Container.DataItem, "Department_Namestr")%>
                                </p>
                            </div>


                            <asp:Label ID="lblDepartmentId" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Department_Idint")%>' Visible="true"></asp:Label>

                            <asp:LinkButton ID="linkChildDepartment" CommandName="Click" runat="server" CssClass="small-box-footer" OnClick="linkChildDepartment_Click">More info<i class="fa fa-arrow-circle-right"></i></asp:LinkButton>

                        </div>
                </div><%--<%-- ./col -->--%>
       </ItemTemplate>
       </asp:Repeater>

Код отзад:

  protected void Page_Load(object sender, EventArgs e)
    {
        DataSet dsParentDepartment = null;
        dsParentDepartment = objDepartmentBL.viewDepartmentparent();
         RepeaterDepartmentParent.DataSource = dsParentDepartment.Tables[0];
        RepeaterDepartmentParent.DataBind();

    }

  protected void linkChildDepartment_Click(Object sender, EventArgs e)
    {
        //what to write here??
        //i have tried the bellow code but it gives me every data in that loop but i
        //want the single data for a link button click.
        //foreach (RepeaterItem item in RepeaterDepartmentParent.Items)
       // {
          //  Label myLabel = (Label)item.FindControl("lblDepartmentId");
         //   myLabel.Text = Id;
        //}
       //edited code that works properly
        LinkButton linkChildDepartment = (LinkButton)sender;
        RepeaterItem item = (RepeaterItem)linkChildDepartment.NamingContainer;
        Label myLabel = (Label)item.FindControl("lblDepartmentId");

    }

Как мога правилно да реферирам текста на етикета на бутона за връзка?


person manish    schedule 06.08.2014    source източник
comment
възможен дубликат на Не можете да намерите контрол в рамките на asp.net repeater?   -  person Philip Pittle    schedule 06.08.2014
comment
да, вероятно, но те ме объркват на този ред. Трябва да зададете атрибута OnItemDataBound=myFunction и аз не искам да използвам OnItemDataBound.. ако видите отговора там, не е нужно да използваме това. трябва само да използваме NamingContainer Това е всичко.   -  person manish    schedule 06.08.2014


Отговори (1)


Можете да използвате свойството NamingContainer, за да получите препратка към RepeaterItem. Оттам е кратък път до вашия етикет:

protected void linkChildDepartment_Click(Object sender, EventArgs e)
{
    LinkButton linkChildDepartment = (LinkButton) sender;
    RepeaterItem item = (RepeaterItem) linkChildDepartment.NamingContainer;
    Label myLabel = (Label)item.FindControl("lblDepartmentId");
     // ...
}
person Tim Schmelter    schedule 06.08.2014
comment
ох благодаря приятелю. работи перфектно. @тим Шмелтер - person manish; 06.08.2014