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
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