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)
6 yıl ö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 (16984)
    6 yıl önce cevaplandı

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