2015-12-16 5 views
0

У меня есть ретранслятор, и я пытаюсь получить доступ к ярлыкам внутри него. Вот мой метод:элементы доступа в репитере

protected void ButtonlarıTemizle() 
    { 
     int n = 0; 
     foreach (RepeaterItem item in Repeater1.Items) 
     { 
      n++; 
      Label lbl = item.FindControl("lblApproved") as Label; 
      Button btn = item.FindControl("btnAssignApproved") as Button; 
      if (lbl.Text.Equals("Satışa Dönmüştür")) 
      { 
       btn.Visible = false; 
       lbl.ForeColor = System.Drawing.Color.Blue; 
      } 
     } 
     Response.Write("<script lang='JavaScript'>alert('"+n+"');</script>"); 
    } 

я могу получить доступ внутрь ретранслятора, но вот проблема: я не могу получить доступ к последнему пункту ретранслятора. Я помещаю эту переменную 'n', чтобы контролировать, сколько раз я перехожу в цикл foreach, и я вижу, что n всегда дает -1 номеров позиций. Например, если у меня есть 3 элемента в повторителе, n равно 2, если в репитере есть 1 элемент, n равно 0. Что я делаю неправильно здесь?

Edit: я пишу мою страницу .aspx, так как он просил

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="EntityDataSourceTeklifler" OnItemCommand="Repeater1_ItemCommand"> 
        <ItemTemplate> 
         <div class="panel panel-primary"> 
          <div class="panel-body"> 
           <strong>Teklif No.</strong>&nbsp;<%#Eval("TeklifId") %><br /> 
           <strong>Teklif Tarihi:</strong>&nbsp;<%#Eval("TeklifTarih") %><br /> 
           <strong>Teklifi Hazırlayan:</strong>&nbsp;<%#Eval("Name") %>&nbsp;<%#Eval("Surname") %><br /> 
           <strong>Firma Adı:</strong>&nbsp;<%#Eval("FirmaAdi") %><br /> 
           <strong>Ürünler:</strong><br /> 
           <%#Eval("TeklifSiparis") %> 
           <strong>Genel Toplam:</strong>&nbsp;<%#Eval("TeklifTutar") %>$<br /> 
           <strong>Not:</strong><br /> 
           <%#Eval("TeklifNot") %><br /> 
           <strong>Teklif Durumu:</strong>&nbsp;<asp:Label ForeColor="Red" ID="lblApproved" runat="server" Text='<%# CheckIfApproved(Convert.ToBoolean(Eval("Approved"))) %>'></asp:Label><br /><br /> 
           <asp:Button ID="btnAssignApproved" runat="server" Text="Satışa Döndü Olarak İşaretle" CssClass="btn btn-primary" CommandName="Done" CommandArgument='<%# Eval("TeklifId") %>' /> 
          </div> 
         </div> 
        </ItemTemplate> 
       </asp:Repeater> 
+0

'n' переменная в сторону, почему вы думаете, что не можете получить доступ к последнему элементу в репитере? – sr28

+0

Благодарим вас за ответ. Как вы можете видеть, я меняю цвет ярлыка и видимость кнопок. Все элементы репитера, за исключением последнего @ sr28 –

+0

@KorayDurudogan - Можете ли вы показать код разметки? .aspx-страница? –

ответ

1

Я не знаю, почему вы явным вызовом другого метода, но то, что вы делаете легко может быть сделано в случае ItemDataBound управления ретранслятором: -

<asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound" 

Тогда обработчик это следующим образом: -

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item) 
    { 
     Label lbl = e.Item.FindControl("lblApproved") as Label; 
     Button btn = e.Item.FindControl("btnAssignApproved") as Button; 
     if (lbl.Text.Equals("Satışa Dönmüştür")) 
     { 
      btn.Visible = false; 
      lbl.ForeColor = System.Drawing.Color.Blue; 
     } 
    } 
} 

Обратите внимание, что нет необходимости делать какие-либо петли на ваших ретрансляционных элементах. Repeater ItemDataBound событие будет срабатывать для каждого элемента, когда он ограничен. Кроме того, если вы хотите, чтобы count просто объявлял переменную вне этого метода и увеличивал ее внутри этого события.

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