ASP.NET EntityDataSource

EntityDataSource nesnesi ASP.NET Webformsta Entity Data Model ile birlikte gelen bir nesnedir. Entity FrameWork 5.0 ile problemsiz çalışan veriye erişim nesnelerinden biridir. OgrenciBilgiDB veritabanında OgrenciTBL adlı bir tablo oluşturalım.

Şİmdi bir Webforms projesi oluşturup Default.aspx sayfasına Gridview ve EntityDataSource ekleyelim.

Evet şimdi Entity Data Modelimizi oluşturalım. Nasıl oluşturulduğuna buradan bakabilirsiniz. Model oluştuğunda projemizin son durumu

;

EntityDataSource1 nesnesini veriye bağlayacağız. Nesnenin Smart Tagına tıklayınız ve Configure Data Source seçiniz.

Gelen pencerede Entity Data Model oluşturma sonrası oluşan OgrenciBilgiDBEntities seçiniz. Next butonuna basınız.

Kullanacağımız tablo ismini seçelim ve alanlarımızı görelim. Finish butonuna basalım.

EntityDataSource1 ile işlem tamam. Şimdi Gridviewin Smart Tagına tıklayalım ve veriye bağladığımız EntityDataSource1 i seçelim.

Projeyi test ediniz. Gridviewde bilgilerin görüntülendiğini göreceksiniz. Default sayfamızın tasarımı şu şekilde olsun.

 <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        .boyut {
            width: 200px;
            height: 25px;
        }
    </style>
 </head>
<body>
    <form id="form2" runat="server">
        <div>

            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" CellPadding="4" DataKeyNames="Id" DataSourceID="EntityDataSource1" ForeColor="#333333">
                <AlternatingRowStyle BackColor="White" />
                <Columns>
                    <asp:BoundField DataField="Id" HeaderText="Id" ReadOnly="True" SortExpression="Id" />
                    <asp:BoundField DataField="Ad" HeaderText="Ad" SortExpression="Ad" />
                    <asp:BoundField DataField="Soyad" HeaderText="Soyad" SortExpression="Soyad" />
                    <asp:BoundField DataField="VeliAd" HeaderText="VeliAd" SortExpression="VeliAd" />
                    <asp:BoundField DataField="VeliTel" HeaderText="VeliTel" SortExpression="VeliTel" />
                    <asp:BoundField DataField="Adres" HeaderText="Adres" SortExpression="Adres" />
                    <asp:BoundField DataField="ResimYol" HeaderText="ResimYol" SortExpression="ResimYol" />
                    <asp:BoundField DataField="OkulNo" HeaderText="OkulNo" SortExpression="OkulNo" />
                </Columns>
                <EditRowStyle BackColor="#2461BF" />
                <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
                <RowStyle BackColor="#EFF3FB" />
                <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                <SortedAscendingCellStyle BackColor="#F5F7FB" />
                <SortedAscendingHeaderStyle BackColor="#6D95E1" />
                <SortedDescendingCellStyle BackColor="#E9EBEF" />
                <SortedDescendingHeaderStyle BackColor="#4870BE" />
            </asp:GridView>
            <br />
            <table style="width: 400px; padding: 8px;">
                <tr>
                    <td>Okul No</td>
                    <td>
                        <asp:TextBox ID="txtokul" CssClass="boyut" runat="server"></asp:TextBox></td>
                </tr>
                <tr>
                    <td>Öğrenci Adı</td>
                    <td>
                        <asp:TextBox ID="txtad" CssClass="boyut" runat="server"></asp:TextBox></td>
                </tr>
                <tr>
                    <td>Öğrenci Soyadı</td>
                    <td>
                        <asp:TextBox ID="txtsoyad" CssClass="boyut" runat="server"></asp:TextBox></td>
                </tr>
                <tr>
                    <td>Veli Adı</td>
                    <td>
                        <asp:TextBox ID="txtveli" CssClass="boyut" runat="server"></asp:TextBox></td>
                </tr>
                <tr>
                    <td>Veli Tel</td>
                    <td>
                        <asp:TextBox ID="txtvelitel" CssClass="boyut" runat="server"></asp:TextBox></td>
                </tr>
                <tr>
                    <td>Adres</td>
                    <td>
                        <asp:TextBox ID="txtadres" CssClass="boyut" runat="server" TextMode="MultiLine" Rows="15" Height="50px"></asp:TextBox></td>
                </tr>
                <tr>
                    <td colspan="2">
                        <asp:Button ID="Button1" runat="server" Text="Kaydet" Height="30px" Width="90px" OnClick="Button1_Click" />
                        <asp:Button ID="Button2" runat="server" Text="Filtre" Height="30px" Width="90px" OnClick="Button2_Click" /></td>
                </tr>
            </table>
        </div>
        <asp:EntityDataSource ID="EntityDataSource1" runat="server" ConnectionString="name=OgrenciBilgiDBEntities" DefaultContainerName="OgrenciBilgiDBEntities"  EnableFlattening="False" EntitySetName="OgrenciTBL">
       </asp:EntityDataSource>
    </form>
</body>
</html>

Görüntümüz;

Kaydet butonunu şöyle kodlayalım.

 OgrenciBilgiDBEntities db = new OgrenciBilgiDBEntities();
 protected void Button1_Click(object sender, EventArgs e)
 {
     OgrenciTBL ogrtablo = new OgrenciTBL();
     ogrtablo.OkulNo = Convert.ToInt32(txtokul.Text);
     ogrtablo.Ad = txtad.Text;
     ogrtablo.Soyad = txtsoyad.Text;
     ogrtablo.VeliAd = txtveli.Text;
     ogrtablo.VeliTel = txtvelitel.Text;
     ogrtablo.Adres = txtadres.Text;
     db.OgrenciTBL.Add(ogrtablo);
     db.SaveChanges();
     GridView1.DataBind(); //Gridi yenilemek için.Böylece yeni eklenen kayıt görülür.
 }
Filtre butonunu kullanarak EntityDataSource nesnesinin özelliklerine bakalım.

EntityDataSource Where Özelliği
Belli şartlara uyan kayıtları filtrelemek amacıyla kullanılır.

EntityDataSource1.Where = "it.Id>3";  //İtemi Id yani alan adı Id demektir. Id si 3 ten büyük olanları gösteririr.
EntityDataSource1.Where = " it.Ad Like '%e%'"; //İçinde e harfi olan isimleri göster.
EntityDataSource1.Where = " it.Ad Like 'e%'"; //Adı e harfi ile başlayanları göeter.
EntityDataSource1.Where = " it.Ad Like '%e'"; //Adı e ile bitenleri göster.
EntityDataSource1.Where = " it.Ad='Ahmet'"; //Adı Ahmet olanları göster.
EntityDataSource1.Where = "it.Id>3 and it.Id<9"; //Id si 3 ile 9 arasında olanları göster.
EntityDataSource1.Where = "it.OkulNo=" + Convert.ToInt32(txtokul.Text); //Okul numarası txtokul text kutusunaa girilen kaydı göster.
EntityDataSource1.Where = "it.Ad='" + txtad.Text + "'"; //Adı txtad text kutusuna girileni göster
EntityDataSource1.Where = "it.Ad Like '%" + txtad.Text + "%'"; //Adında txtad text kutusuna girilen ifade olanları göster
EntityDataSource1.OrderBy = "it.Ad DESC"; //Ad alanına göre Z..A ya göre sırala
EntityDataSource1.OrderBy = "it.Ad ASC"; //Ad alanına göre A..Z ye göre sırala.

EntityDataSource CommandText Özelliği
Sql komutları ile veri filtrelemek için kullanılır.
EntityDataSource1.EntitySetName = null; //Bu özellik kapatılmaz ise commandtext hata verir.
EntityDataSource1.CommandText = "SELECT value p FROM OgrenciTBL as p WHERE p.OkulNo=" + txtokul.Text +""; //Okul numarası txtokul text kutusundan gelen kaydı göster.

EntityDataSource ilişkili tablolarda kullanmak;
Aşağıdaki gibi Kategori ve Urun tabloları Id ve KattegoriID alanlarından dolayı ilişkili tablodur.


Örnek kayıt girişi aşağıdaki gibidir.


Webformsa iki adet DropdownList ve iki adet EntityDataSource ekleyin. EntitDataSource1 e Kategori tablosunu EntityDataSource2 ye Urun tablosunu bağlayınız. DropdownList1 i Smart tagı ile EntityDataSource1 e, DropdownList2 yi EntityDataSource2 ye bağlayın. Aşağıda tasarım kodu görülmektedir.
<body>
    <form id="form1" runat="server">
    <div>
        <table>
            <tr>
                <td>Kategori Seçiniz</td>
                <td>   <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" DataSourceID="EntityDataSource1" DataTextField="Kategori1" DataValueField="Id" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" Width="200px"></asp:DropDownList></td>
            </tr>
            <tr>
                <td>Ürünler</td>
                <td> <asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="True" DataSourceID="EntityDataSource2" DataTextField="Urunad" DataValueField="Id"  Width="200px">
        </asp:DropDownList></td>
            </tr>
        </table>
    
    </div>
        <asp:EntityDataSource ID="EntityDataSource1" runat="server" ConnectionString="name=OgrenciBilgiDBEntities" DefaultContainerName="OgrenciBilgiDBEntities" EnableFlattening="False" EntitySetName="Kategori" EntityTypeFilter="Kategori"></asp:EntityDataSource>
        <asp:EntityDataSource ID="EntityDataSource2" runat="server" ConnectionString="name=OgrenciBilgiDBEntities" DefaultContainerName="OgrenciBilgiDBEntities" EnableFlattening="False" EntitySetName="Urun" EntityTypeFilter="Urun">
        </asp:EntityDataSource>
        <br />
    </form>
</body>

Şimdi kodlamaya geçelim.
 protected void Page_Load(object sender, EventArgs e)
 {
     EntityDataSource2.Where = "it.KattegoriID=1"; //Sayfa yüklendiğinde Kategorisi 1'e eşit olan kayıtları göster. DropdownList2 de Dropdownlist1'in ilk değerine göre ilişkili kayıtların gelmesi için bu kodu yazdık.

 }

 protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
 {
     int id_al = Convert.ToInt32(DropDownList1.SelectedValue); //Dropdownlist1 in id değerini aldık 
     EntityDataSource2.Where = "it.KattegoriID=" + id_al; //Dropdownlist2 nin KattegoriID ile filtreledik.
 }
Projeyi test edin sonuç. DropdownList1 de bir kategori seçildiğinde ilgili kategoriye ait bilgilerin DropDownList2 de göründüğünü göreceksiniz.
Kolay gelsin.


Etiketler
Entity Model Data Source Where CommandText
Mesaj Yaz