Bu makalemizde datalist içine veritabanimizdan veri doldurmayi ve bu verileri gruplandirarak ekranda göstermeyi anlatacagim.
Datalisti veritabanindan aldigimiz bilgilerle istedigimiz yapida doldurabiliriz. Ama bilgilerimiz farkli gruplara aitse ve bizde bu gruplara göre göstermek istiyorsak kullanabilecegimiz birkaç farkli yöntem var. Bir örnekle anlatirsak, elimizde bir ürüne ait özellikler var. Mesela cep telefonu için boyutu, rengi, hafizasi, pil türü, konusma süresi, zoom vs. vs. bu özelliklerin bir kismi genel özellikler, bir kismi güç özellikleri, kamera özellikler seklinde ayirabiliriz. Bu verileri datalistimizde gösterirken, özellikleri gruplarina göre ayirarak göstermek istiyoruz. Örnegimizde kullanacagimiz veritabani yapidi ve içindeki bilgiler asagidaki gibi olsun.
Id |
OzellikAdi |
Deger |
Grubu |
1 |
Renk |
Siyah |
Genel Özellikleri |
2 |
Ekran Tipi |
TFT |
Ekran Özellikleri |
3 |
Ekran Çözünürlügü |
240 x 320 Piksel |
Ekran Özellikleri |
4 |
Renk Çözünürlügü |
256K Renk |
Ekran Özellikleri |
5 |
Boyutlar |
95 x 47 x 14.3 mm |
Genel Özellikleri |
6 |
Telefon Tipi |
Kayan Kapakli |
Genel Özellikleri |
7 |
Entegre Kamera |
Var |
Kamera Özellikleri |
8 |
Kamera Zoom |
4x |
Kamera Özellikleri |
9 |
Entegre Flas |
Var |
Kamera Özellikleri |
Visual Studio .Net i açip add new Project diyerek yeni bir proje açalim sonra bir datalist ekleyelim. Projemize ekledigimi datalisti asagidaki gibi düzenleyelim.
<asp:DataList ID="MyDataList" runat="server"> <HeaderTemplate> <table> </HeaderTemplate> <ItemTemplate> <tr> <td colspan="2" style="background-color: InactiveCaptionText"> <asp:Label ID="Label1" runat="server" Text=’<%#Bind("Grubu") %>‘></asp:Label> </td> </tr> <tr> <td> <asp:Label ID="Label2" runat="server" Text=’<%#Bind("OzellikAdi") %>‘></asp:Label> </td> <td> <asp:Label ID="Label3" runat="server" Text=’<%#Bind("Deger") %>‘></asp:Label> </td> </tr> </ItemTemplate> <FooterTemplate> </table> </FooterTemplate> </asp:DataList> |
Sayfamizin kod kismana asagidaki fonksitonu ekleyerek Page_Load kosminda çagiralim.
public void VerileriDoldur1() { // veritabani baglantimiz SqlConnection connection = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=deneme;Integrated Security=True"); connection.Open();
//verilrimizi tablodan çekelim SqlDataAdapter da = new SqlDataAdapter("SELECT OzellikAdi,Deger,Grubu FROM Ozellikler order by Grubu ", connection); da.SelectCommand.ExecuteNonQuery();
//datatable a atalim DataTable dTable = new DataTable(); da.Fill(dTable); MyDataList.DataSource = dTable.DefaultView; MyDataList.DataBind(); } |
Saydamizi yukaridaki gibi düzenleyip çalistirdigimizda ekran görüntümüz asagidaki gibi olur.
Yukarida dikkat edecek oursaniz her özellikten önce grup bilgisi yer aliyor. Biz Her grup altinda o gruba ait özellikleri göstermek istersek. Bunun için ilk yöntemimiz, datalistin içi dolarken ayni olan gruplari silmek. Bunun için item data bound içine asagidaki kodu yaziyoruz.
protected void MyDataList_ItemDataBound(object sender, DataListItemEventArgs e) { if (e.Item.ItemType == ListItemType.AlternatingItem | e.Item.ItemType == ListItemType.Item) {
string GrupAdi = ((Label)(e.Item.FindControl("Grup"))).Text; string MevcutGrup = ""; try { MevcutGrup = ViewState["Grup"].ToString(); } catch (Exception) {
}
if (MevcutGrup == GrupAdi) {
((Label)(e.Item.FindControl("Grup"))).Text = "";
e.Item.Visible = false;
}
else {
MevcutGrup = GrupAdi;
ViewState["Grup"] = MevcutGrup;
((Label)(e.Item.FindControl("Grup"))).Text = GrupAdi;
e.Item.Visible = true;
}
} } |
Yukaridaki kodu yazdiktan sonra ekran görüntümüz asagidaki gibi oluyor.
Ayni islemi bir de iki datalist iç içe koyarak da yapabiliriz.ilk datalistimiz sadece grup adlarini, bunun içindeki datalistimizde o gruba ait özellikleri gösterecek. Ilk olarak Veritabanindan sadece grup adlarini çekip ilk dataliste atiyoruz. Ve datalistin item data bounduna o gruba ait özellikleri çekip atiyoruz
public void VerileriDoldur2() { // veritabani baglantimiz SqlConnection connection = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=deneme;Integrated Security=True"); connection.Open();
//gruplari tablodan çekelim SqlDataAdapter da = new SqlDataAdapter("SELECT distinct Grubu FROM Ozellikler ", connection); da.SelectCommand.ExecuteNonQuery();
//dataliste a atalim DataTable dTable = new DataTable(); da.Fill(dTable); GrupDataList.DataSource = dTable.DefaultView; GrupDataList.DataBind(); } protected void GrupDataList_ItemDataBound(object sender, DataListItemEventArgs e) { if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) { string GrupAdi = ((Label)(e.Item.FindControl("Grup"))).Text; // veritabani baglantimiz SqlConnection connection = new SqlConnection("Data Source=.\\sqlexpress;Initial Catalog=deneme;Integrated Security=True"); connection.Open();
//gruba ait özellik ve degerleri tablodan çekelim SqlDataAdapter da = new SqlDataAdapter("SELECT OzellikAdi,Deger FROM Ozellikler where Grubu=’" + GrupAdi + "’ ", connection); da.SelectCommand.ExecuteNonQuery();
//2.dataliste atalim DataTable dTable = new DataTable(); da.Fill(dTable); DataList mylist = ((DataList)(e.Item.FindControl("OzellikDataList"))); mylist.DataSource = dTable.DefaultView; mylist.DataBind(); } } |
Ekran görüntümüz:
kisaca demek istedigim sey Bu en son yazdiginiz .cs kodu için yazilacak html-asp kodu nasil olmali,kodu yazarsaniz çok makbule geçer,ihtycm var tskler
DEVAMI
…. labellarda bi degisiklik yapmadim.
DataBinding: ‘System.Data.DataRowView’, OzellikAdi adinda bir özellik içermiyor.
hatasini aliyorum.gördügünüz gibi
<asp:Label ID="label2" runat="server" Text='<%#Bind ("OzellikAdi")%> ‘></asp:Label> satiri oldugu halde bu hatayi veriyor.Umarim ne demek istedigimi anlamissinizdir..yardim lütfen
Cevap için tesk ederim ama sanirim beni anlamadiniz.en yukardaki kodlari ayni sekilde yazdim..
<tr>
<td colspan="2" style="background-color:InactiveCaptionText">
<asp:Label ID="label1" runat="server" Text='<%#Bind ("Grubu")%> ‘></asp:Label>
</td>
</tr>
<tr>
<td>
<asp:Label ID="label2" runat="server" Text='<%#Bind ("OzellikAdi")%> ‘></asp:Label>
</td>
<td>
<asp:Label ID="label3" runat="server" Text='<%#Bind ("Deger")%> ‘></asp:Label>
</td>
</tr>
Kod bu sekildeyken; en yukarda ilk kodun çiktisini yazmissiniz ,bn de ayni çiktiyi aldim.Fakat içiçe Datalist kullanimnda yine yukarda yazdigim gibi labellarda
merhaba pcmuh
aldigin hata datalist’in içinde OzellikAdi Itemini bulamamis, datalistine:
<asp:Label ID="Label2" runat="server" Text=’
merhabalar,
bn en alttaki iç içe datalist olayini denemeye çalistim,aspx source kisminda
DataBinding: ‘System.Data.DataRowView’, OzellikAdi adinda bir özellik içermiyor.
gibi bir hata veriyor bnde.yardimci olabilecek varmi acaba??
verilen tabloyu bir view sonucu elde edilen gerekli bilgiler olarak düsünebilirsin. aslinda 3 farkli tablo var burada: 1- grup 2- gruba bagli özellik adlari 3- her ürün için farkli olacak özellik degerleri. ama bu makale de amaç sorgu yapilari yada tablo sekilleri degil datalist içindeki verileri gruplamayi anlatmak oldugu için bu sekilde anlattim.
select in içini dolduran insert kismi ne demek maliki.
burda adamlar bir örnek üzerinden biseyler anlatmaya çalismis. örnegin mantikli olmasi veya olmamasinin ne önemi var. ha daha iyi örnek üzerinden anlatmaui düsünüyorsan yaz bir makale yayinlasinlar
beni anlamadigim bir sey var.
grubu adli kolon bir kategori gibi düsünülmüs burada yanilmiyorsam.
eger öyle ise, acaba hangi db de, bu denli bir kategorize etme sekli vardir ki ?
bu anlatilan select in içini dolduran insert kismini çok merak ediyorum. acaba manuel mi yaziliyor grubu ???
Merhaba Çagdas
Site için vakit buldukca çalismalara devam ediyor. Yakin zamanda uye olma islemleri açacagiom ayrica uyelerin makale eklemesinide saglayacagim. Simdilik makale yazmak isteyen arakdaslar bilgi@yazilimmutfagi.com adresine mail atarlarsa sevinirim.
Zaten birlikte çalisilmazsa paylasimi büyütmek çok zor. Katilimlariniz beni sevindirir.
ewet ite güzel bende yeni kayit oldum ama begendim siteyi ama daha çok sey herkez tarafindan paylasilmali bu siteyi tam bir yazilimmutfagi yapalim hepbirlikte arkadaslar iyi gunler.
kac sitede baktim bu konuya hepsi bostu.eywllh diyorum saol artik sorunum cozuldu..
Tesekkürler
Selam sabri siten harika
süper bir paylasim,tesekkür ederim
faydali oldu tesekkür ederim