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

hsnn06 (8) 6 yıl önce sordu

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

Toplam 1 cevap


alattin (17014) 6 yıl önce cevapladı

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.

hsnn06 6 yıl önce

Aynen hocam sizin dediğiniz yerde hata alıyorum. Hangi kodları paylaşmamı istersiniz detay olarak

alattin 6 yıl önce

@hsnn06 kodları eklersen iyi olur elbette (sorunun içine eklemelisin)

hsnn06 6 yıl önce

@alattin hocam soruyu güncelledim bakar mısınız.

alattin 6 yıl önce

@hsnn06 şarjım çok az akşama cevaplayacağım

hsnn06 6 yıl önce

@alattin hocam teşekkür ederim. Aradığım sonuca sayenizde ulaştım. Çok sağolun

alattin 6 yıl önce

@hsnn06 rica ederim