Nesne başvurusu bir nesnenin örneğine ayarlanmadı hatası

1

Merhabalar ,

benim sorum veritabanından gelen değer 1 ise checkbox true değilse false döndürmek istiyorum. Ancak checkbox null değer alıyor ve Nesne başvurusu bir nesnenin örneğine ayarlanmadı hatası alıyorum.            

Html Tarafı : 

<asp:Repeater ID="SiirListRpt" runat="server">
                                                <ItemTemplate>
                                                    <tr>
                                                        <td><%#Eval("Id") %></td>
                                                        <td><%#Eval("Baslik") %></td>
                                                        <td><%#Eval("Konu") %></td>
                                                        <td><%#Eval("YazarAdi") %></td>
                                                        <td><%#Eval("Tarih","{0:dd MMMM yyyy}") %></td>
                                                        <td>
                                                            <div class="divToggleButton">
                                                                <asp:CheckBox ID="chkToggleButton" runat="server" AutoPostBack="true"/>
                                                                <asp:Label ID="lblToggleButton"
                                                                    AssociatedControlID="chkToggleButton" runat="server"
                                                                    ToolTip="Yayın Durumu" />
                                                            </div>
                                                    </tr>
                                                </ItemTemplate>
                                            </asp:Repeater>


Kod tarafı : 


    veritabani vt = new veritabani();
    
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {

          var SiirList = db.Tbl_Siirler.OrderByDescending(x => x.Id).ToList();

            SiirListRpt.DataSource = SiirList;
            SiirListRpt.DataBind();
            db.Dispose();


            SqlCommand komut = new SqlCommand("SELECT * FROM Tbl_Siirler", vt.baglan());

            SqlDataReader oku = komut.ExecuteReader();
            while (oku.Read())
            {
                string deger = oku["Durum"].ToString();

                if (deger == "1")
                {
                    CheckBox chk = (CheckBox)SiirListRpt.FindControl("chkToggleButton");
                    chk.Checked = true;
                }
                else
                {
                    var chk = (HtmlInputCheckBox)SiirListRpt.FindControl("chkToggleButton");
                    chk.Checked = false;
                }


            }
        }

    }

Kodlar bu şekilde değerleri alıyor ancak if bloğundan geçip Checkboxa gelince değer null oluyor. Şimdiden teşekkür ederim

hsnn06 hsnn06 (8)
10 ay önce sordu

Toplam 1 Cevap


0

Nesne başvurusu bir nesnenin örneğine ayarlanmadı hatası erişmek istediğin nesne null ise ortaya çıkar. Örneğin öğrenci diye bir tablon var. Sen veritabanından kayıt numarası 10 olan öğrenciyi çekmek istiyorsun. Fakat tablonda kayıt numarası 10 olan bir öğrenci yok. İşte bu durumda sana null döner.

senin kodundaysa muhtemelen şu satırda hata oluşuyor:

(CheckBox)SiirListRpt.FindControl("chkToggleButton");

FindControl metodu chkToggleButton adlı kontrolü bulamıyor. Bu sebepten Nesne başvurusu bir nesnenin örneğine ayarlanmadı hatası alıyorsun. Kodunun tamamı olmadığı detay veremiyorum.

Kodunu biraz daha iyi hale getirmeye çalıştım, uzun zamandır Asp.net web formlarım ile alakam yok ama işine yarayacaktır:

TestEntities db = new TestEntities();
        protected void Page_Load(object sender, EventArgs e)
        {
            SqlConnection vt = new SqlConnection("Server=.\\SqlExpress;Database=Test;Trusted_Connection=True;");
            var db = new TestEntities();
            if (!IsPostBack)
            {

                var SiirList = db.Tbl_Siirler.OrderByDescending(x => x.Id).ToList();
                SiirListRpt.DataSource = SiirList;
                SiirListRpt.DataBind();
            }
        }

        protected void SiirListRpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                if (((Tbl_Siirler)e.Item.DataItem).Durum == "1")
                    ((CheckBox)e.Item.FindControl("chkToggleButton")).Checked = true;

            }
        }

Fark edeceğin üzere Repeater nesnesinin ItemDataBound olayını kullandım. Bu sayede veri bağlanırken kontrolü bulup değeri kontrol edebiliyorum.

aspx tarafta;

 <asp:Repeater ID="SiirListRpt" runat="server" OnItemDataBound="SiirListRpt_ItemDataBound">

sadece OnItemDataBound özelliğini ekledim. Test ettim, çalışıyor. Sen kendine göre düzenleyebilirsin.

alattin alattin (10822)
10 ay önce cevaplandı

  • Aynen hocam sizin dediğiniz yerde hata alıyorum. Hangi kodları paylaşmamı istersiniz detay olarak hsnn06 10 ay önce
  • @hsnn06 kodları eklersen iyi olur elbette (sorunun içine eklemelisin) alattin 10 ay önce
  • @alattin hocam soruyu güncelledim bakar mısınız. hsnn06 10 ay önce
  • @hsnn06 şarjım çok az akşama cevaplayacağım alattin 10 ay önce
  • @alattin hocam teşekkür ederim. Aradığım sonuca sayenizde ulaştım. Çok sağolun hsnn06 10 ay önce
  • @hsnn06 rica ederim alattin 10 ay önce

üyelik gerektirir

Cevap yazabilmek için üye girişi yapmalısınız.

Eğer uzmanim.net üyesiyseniz giriş yapabilirsiniz: üye girişi yap
uzmanim.net'e üye olmak çok kolaydır: hemen kayıt ol