2011-07-24 2 views
0

J'ai un problème concernant FindControl. J'utilise ASPxRoundPanel (avec le composant DXperience) dans un répéteur. J'ai une zone de texte appelée "txtAdet ID" dans ASPxRoundPanel. Je ne peux pas accéder à l'intérieur de la boîte de texte. Et j'ai eu l'erreur suivante.Problème FindControl

"Object reference not set to an instance of an object." 

ascx. Code:

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="urunLinq" 
    onitemcommand="Repeater1_ItemCommand"> 
<ItemTemplate> 

    <dxrp:ASPxRoundPanel ID="ASPxRoundPanel1" runat="server" Width="980px" ShowHeader="true" Height="550px"> 
    <PanelCollection> 
    <dxrp:PanelContent> 
    <div style="width:980; overflow:hidden;height:350px;"> 
    <div style="float:left; width:410px;height:310px;"> 
    <asp:Image ID="Image1" Width="400" Height="300" ImageUrl='<%# "../urunResim/"+Eval("urunAnaResim") %>' runat="server" /> 
</div> 
<div style="float:left;margin-top:0px;overflow:hidden;width:500px;"> 
<h2><%# Eval("urunAdi") %></h2> 

<h4>Ürün Özellikleri</h4> 
<p style="font-size:x-small;"><%# Eval("urunOzellikleri") %></p> 
<br /> 
<table> 
<tr> 
<td><h5>Adet </h5></td><td><asp:TextBox ID="txtAdet" Width="50" runat="server"></asp:TextBox></td> 
<td><h4>  Peşin Fiyatı :</h4></td><td><h3 style="color:Red;"> <%# Eval("kdvliFiyat") %>TL</h3></td> 
</tr> 
</table> 
<br /> 
<table> 
<tr> 
<td><a href="#">İnternet satış taksitlerini görmek için tıklayın.</a></td> 
<td>     
<asp:ImageButton ID="ImageButton1" CommandName="sepeteKaydet" runat="server" ImageUrl="~/img/icons/sepeteEkle.JPG" /></td> 
</tr> 
</table> 
</div></div> 

    </dxrp:PanelContent> 
    </PanelCollection> 
    <HeaderTemplate> 
    <h3><%# Eval("urunAdi") %></h3> 
    </HeaderTemplate> 
    </dxrp:ASPxRoundPanel> 

</ItemTemplate> 
</asp:Repeater> 

Code .cs:

protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e) 
     { 
      if (e.CommandName=="sepeteKaydet") 
      { 
       TextBox bulunanTextKontrol = ((TextBox)e.Item.FindControl("txtAdet")); 
       string urunAdet = bulunanTextKontrol.Text; 
       string sessionId = Session.SessionID; 
       int urunId=Convert.ToInt32(Request["id"].ToString()); 
       tempSepet geciciSepet = new tempSepet() 
       { 
        adet = Convert.ToInt32(urunAdet), 
        eklemeSaati = Convert.ToString(DateTime.Now.Hour.ToString()), 
        eklemeTarihi = Convert.ToString(DateTime.Now.ToShortDateString()), 
        sessionId = sessionId, 
        urunId = urunId 
       }; 
       selcukData.tempSepets.InsertOnSubmit(geciciSepet); 
       selcukData.SubmitChanges(); 
       Response.Write("<script type='text/javascript'>alert('Ürün sepetinize başarıyla eklendi')</script>"); 
       ((TextBox)e.Item.FindControl("txtAdet")).Text = null; 
      } 
     } 

Je suis une erreur de la ligne suivante.

string urunAdet = bulunanTextKontrol.Text; 
+0

Je pense, il est mauvaise idée de poster ici comme * gros morceau de-bad-code formaté * avec demandant de trouver un problème. Ce sera génial, si vous avez essayé de réfléchir et de poser ici quelques questions communes avec vos suggestions. * (mon oppinion) * –

Répondre

0

contrôle ASPxRoundPanel est une sous-classe de ASPxWebControl qui implémente l'interface INamingContainer. Cela signifie que FindControl appelé sur un contrôle parent (RepeaterItem à votre cas) ne sera pas en mesure de trouver quelque chose à l'intérieur de ASPxRoundPanel (explication here). Donc, vous avez besoin d'au moins deux étapes pour accomplir votre tâche:

ASPxRoundPanel1 roundPanel = ((ASPxRoundPanel1)e.Item.FindControl("ASPxRoundPanel1")); 
TextBox bulunanTextKontrol = ((TextBox)roundPanel.FindControl("txtAdet"));