Asp.Net İle BLL Ve ObjectDataSource Kullanımı
Herkese Merhabalar Arkadaşlar Bu Makalemizde BBL Business Logic Layer Üzerine Bir Uygulama Geliştireceğiz,
Örneğimizde (Strongaly Typed Dataset) Ve (ObjectDataSource) İle Birlikte,
Kendi Custom BLL Class’ımızı Oluşturup Her İkisini’de Denemiş Ve Kullanmış Olacağız,
Dilerseniz Sözü Fazla Uzatmadan Projemize Geçelim Öncelikle ASP.NET İle Yeni Bir Web Projesi Oluşturalım Benim Örneğimin Adı TYPED_DATASET_KULLANIMI
Daha Önceden SQL SERVER Üzerinde Urun Adında Bir Database Oluşturmuştum Ve Urun Database’ine Aşağıdaki Gibi Katagoriler Adında Bir Table Ekleyelim,
Ben Bu Örnek Üzerinden Gideceğim
USE Urun
GO
CREATE TABLE Kategorilerim
(
KategoriID INT IDENTITY(1,1) NOT NULL,
KategoriAdi VARCHAR(75) NOT NULL,
Aciklama VARCHAR(200) NULL,
KategoriAktif INT NULL,
PRIMARY KEY CLUSTERED(KategoriID ASC)
)
GO
INSERT INTO
Kategorilerim(KategoriAdi,Aciklama,KategoriAktif)
VALUES
(‘Laptop Bilgisayar’,'Hede’,1),
(‘Desktop Bilgisayar’,'Hödö’,1),
(‘Beyaz Eşyalar’,'Hede’,0),
(‘Antivirüs Yazılımları’,'Hödö’,1),
(‘Bilgisayar Oyunları’,'Hede’,1)
GO
SELECT * FROM Kategorilerim
Veritabanı Kısmını Bitirdikden Sonra,
İlk Önce web.config Dosyamızda ConnectionString’imizi Ayarlıyoruz
<connectionStrings>
<add name=”Uye”
connectionString=”Data Source=.; Initial Catalog=Urun; Integrated Security=true”
providerName=”System.Data.SqlClient”/>
</connectionStrings>
Projemize Hemen Sağ Click Ve Ardından App_Code Klasörü Oluşturuyoruz,
Ve App_Code İçerisinde MyCategory.xsd Adında Bir Xml Schema Data Ekliyoruz.
Sırası İle Resimdeki İşlemleri Yapıyoruz.
1 – İlk Önce Select Sorgusu Oluşturuyoruz,


Burada web.config Dosyası İçerisindeki Bağlantımızı Gösteriyoruz Ve İleri Diyoruz.









2 – Daha Sonra KategoriID’sine Göre Select Sorgusu,



3 – InsertCategories Sorgusunda SELECT SCOPE_IDENTITY() Ayarladığımız İçin InsertCategories Sorgusunun Properties Kısmındaki ExecuteMode Kısmını Scalar Olarak Ayarlıyoruz.





4 – UpdateCategories Sorgusunu’da Aynen Insert Sorgusu Gibi Ayarlıyoruz Değişen Sadece Insert Yerine Update Seçili Olması, Update Sorgusunun ExecuteMode Kısmı NonQuery Olarak Kalabilir.

5 – Aynı Şekilde Delete Sorusuda Insert Ve Update Sorgusu Gibi Sadece Önümüze Gelen Sihirbazdan Delete Kısmını İşaretliyoruz Delete Sorgusunun’da ExecuteMode Kısmı NonQuery Olarak Kalabilir.

6 – GetCustomPaging Sorgusu Veritabanında Var Olan Bir Store Procedure Çağıracak Hemen Urun Veritabanımızdaki Kategoriler Tablosuna Sayfalama Yapmak İçin Bir Store Procedure Yazalım
CREATE PROCEDURE SP_GetCategoriesByCustomPaging
@StartRowIndex INT,
@MaxRowIndex INT
AS
BEGIN
WITH SILO AS
(
SELECT ROW_NUMBER() OVER(ORDER BY KategoriID) myROW,
K.KategoriID,K.KategoriAdi,K.Aciklama,K.KategoriAktif FROM Kategoriler K
)
SELECT S.KategoriID,S.KategoriAdi,S.Aciklama,S.KategoriAktif FROM SILO S
WHERE myROW BETWEEN @StartRowIndex + 1 AND @StartRowIndex + @MaxRowIndex
END
Sorgunuzu Dilerseniz İç İçe SubQuery İle Yazabilirsiniz Tamamen Size Kalmış
SELECT KategoriID,KategoriAdi,Aciklama,KategoriAktif
FROM
(
SELECT KategoriID,KategoriAdi,Aciklama,KategoriAktif, ROW_NUMBER() OVER(ORDER BY KategoriID) myRow FROM Kategoriler
) Kategorilerim
WHERE myRow BETWEEN @StartRowIndex + 1 AND @StartRowIndex + @MaxRowIndex







7 – Sayfalama İçin Gerekli Olan Bir Methodumuz Daha Kaldı Kategoriler Tablosunun Count’unu Geriye Döndüren Bir Method Oluşturalım Şimdide.






Artık Xml Schema Data Kısmını Bitirdiğimize Göre Custom BLL Class’ımıza Geçebiliriz.
Hemen App_Code İçerisinde Sağ Click Ve Ardından Category_BLL.cs İsimli Bir Class Oluşturuyoruz Ve
İçerisine Aşağıdaki Gibi Kodlarımızı Yazıyoruz.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using MyCategoryTableAdapters;
[DataObject]
public class Category_BLL
{
private KategorilerTableAdapter _adapter;
public KategorilerTableAdapter Adapter
{ get { if (_adapter == null) _adapter = new KategorilerTableAdapter(); return _adapter; } }
[DataObjectMethod(DataObjectMethodType.Select,true)]
public MyCategory.KategorilerDataTable Kategorileri_Getir()
{
return Adapter.GetCatecories();
}
[DataObjectMethod(DataObjectMethodType.Select, false)]
public MyCategory.KategorilerDataTable KategorileriIDYeGoreGetir(int KategoriID)
{
return Adapter.GetCategoriesByCategoryID(KategoriID);
}
[DataObjectMethod(DataObjectMethodType.Select,false)]
public MyCategory.KategorilerDataTable GetCustomPagingBySilo(int? StartRowIndex, int? MaxRowIndex)
{
return Adapter.GetCustomPaging(StartRowIndex, MaxRowIndex);
}
[DataObjectMethod(DataObjectMethodType.Select, false)]
public int? GetCount()
{
return Adapter.GetCategoriesCount();
}
[DataObjectMethod(DataObjectMethodType.Insert,true)]
public bool KategoriKaydet(string KategoriAdi, string Aciklama, int KategoriAktif)
{
MyCategory.KategorilerDataTable kategoriler = new MyCategory.KategorilerDataTable();
MyCategory.KategorilerRow kategori = kategoriler.NewKategorilerRow();
kategori.KategoriAdi = KategoriAdi;
if (Aciklama == null)
kategori.SetAciklamaNull();
else
kategori.Aciklama = Aciklama;
if (KategoriAktif == null)
kategori.SetKategoriAktifNull();
else
kategori.KategoriAktif = KategoriAktif;
kategoriler.AddKategorilerRow(kategori);
int affected = Adapter.Update(kategoriler);
return affected == 1;
}
[DataObjectMethod(DataObjectMethodType.Update, true)]
public bool KategoriGuncelle(string KategoriAdi, string Aciklama, int KategoriAktif, int KategoriID)
{
MyCategory.KategorilerDataTable kategoriler = Adapter.GetCategoriesByCategoryID(KategoriID);
if (kategoriler.Count == null)
return false;
else
{
MyCategory.KategorilerRow kategori = kategoriler[0];
kategori.KategoriAdi = KategoriAdi;
if (Aciklama == null)
kategori.SetAciklamaNull();
else
kategori.Aciklama = Aciklama;
if (KategoriAktif == null)
kategori.SetKategoriAktifNull();
else
kategori.KategoriAktif = KategoriAktif;
int affected = Adapter.Update(kategoriler);
return affected == 1;
}
}
[DataObjectMethod(DataObjectMethodType.Delete, true)]
public bool KategoriSil(int KategoriID)
{
int affected = Adapter.Delete(KategoriID);
return affected == 1;
}
public Category_BLL() { }
}
App_Code İçerisinde Birde CustomDeleteButton.cs Adlı Bir Class Daha oluşturalım Ve İçerisini Aşağıdaki Gibi Yazalım.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
namespace myCustomPage
{
public class CustomPage : ButtonField
{
private string _customText = “Silmek İstediğinizden Eminmisiniz ?”;
public string CustomerText
{ get { return this._customText; } set { this._customText = value; } }
public CustomPage()
{
this.CommandName = “Delete”;
this.Text = “Siliniz”;
}
public override void InitializeCell(System.Web.UI.WebControls.DataControlFieldCell cell, System.Web.UI.WebControls.DataControlCellType cellType, System.Web.UI.WebControls.DataControlRowState rowState, int rowIndex)
{
base.InitializeCell(cell, cellType, rowState, rowIndex);
if (cellType == DataControlCellType.DataCell)
{
WebControl button = (WebControl)cell.Controls[0];
button.Attributes["onclick"] = string.Format(“return confirm (‘{0}’)”, _customText);
}
}
}
}
GridView’den Herhangi Bir Satırı Silmek İstediğimizde Karşımıza Bir Uyarı Penceresi Çıkarmak İçin Böyle Bir Class Yazdık.
Gelelim Tasarım Kısmına Aşağıdaki Gibi Tasarlayaım
<%@ Register TagPrefix=”custom” Namaspace=”myCustomPage”%> Bu Kısmı Ayrıyetten Biz İlave Ediyoruz Ki Oluşturduğumuz CustomDeleteButton Class2ımızı GridView İçerisinde Kullanabilelim.
<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”Default3.aspx.cs” Inherits=”Default3″ %>
<%@ Register TagPrefix=”custom” Namespace=”myCustomPage” %>
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head runat=”server”>
<title></title>
<link href=”StyleSheet.css” rel=”Stylesheet” type=”text/css” />
</head>
<body>
<form id=”form1″ runat=”server”>
<div>
<h3 align=”left” style=”color:Maroon;”><%=DateTime.Now.ToString(“T”) %></h3>
<table align=”center”>
<tr>
<td><b>Kategori ID</b></td>
<td><asp:TextBox ID=”txtKategoriID” runat=”server” Width=”50″ /></td>
</tr>
<tr>
<td><b>Kategori Adı</b></td>
<td><asp:TextBox ID=”txtKategoriAdi” runat=”server” Width=”200″ /></td>
</tr>
<tr>
<td><b>Açıklama</b></td>
<td><asp:TextBox ID=”txtAciklama” runat=”server” Width=”200″ /></td>
</tr>
<tr>
<td><b>Kategori Aktif</b></td>
<td><asp:TextBox ID=”txtKategoriAktif” runat=”server” Width=”200″ /></td>
</tr>
<tr>
<td colspan=”2″ align=”right”>
<asp:Button ID=”btnSave” runat=”server” Text=”Kaydet” onclick=”btnSave_Click” />
<asp:Button ID=”btnUpdate” runat=”server” Text=”Güncelle”
onclick=”btnUpdate_Click”/>
<asp:Button ID=”btnDelete” runat=”server” Text=”Sil” onclick=”btnDelete_Click” />
</td>
</tr>
</table>
<br />
<br />
<table align=”center”>
<tr>
<td>
<asp:GridView
ID=”GridView2″
runat=”server”
DataKeyNames=”KategoriID”
AutoGenerateColumns=”false”>
<Columns>
<asp:BoundField DataField=”KategoriID” HeaderText=”Kategori ID” />
<asp:BoundField DataField=”KategoriAdi” HeaderText=”Kategori Adı” />
<asp:BoundField DataField=”Aciklama” HeaderText=”Açıklama” />
<asp:BoundField DataField=”KategoriAktif” HeaderText=”Kategori Aktif” />
</Columns>
</asp:GridView>
</td>
</tr>
</table>
<br /><hr /><br />
<asp:ObjectDataSource
ID=”ObjectDataSource1″
runat=”server”
EnablePaging=”true”
TypeName=”Category_BLL”
SelectMethod=”GetCustomPagingBySilo”
SelectCountMethod=”GetCount”
InsertMethod=”KategoriKaydet”
UpdateMethod=”KategoriGuncelle”
DeleteMethod=”KategoriSil”
StartRowIndexParameterName=”StartRowIndex”
MaximumRowsParameterName=”MaxRowIndex”/>
<table align=”center”>
<tr>
<td>
<asp:DetailsView
ID=”DetailsView1″
runat=”server”
AutoGenerateRows=”false”
AutoGenerateInsertButton=”true”
DataKeyNames=”KategoriID”
DefaultMode=”Insert”
DataSourceID=”ObjectDataSource1″>
<Fields>
<asp:BoundField DataField=”KategoriAdi” HeaderText=”Kategori Adı” />
<asp:BoundField DataField=”Aciklama” HeaderText=”Açıklama” />
<asp:BoundField DataField=”KategoriAktif” HeaderText=”Kategori Aktif” />
</Fields>
</asp:DetailsView>
</td>
</tr>
<tr>
<td>
<asp:GridView
ID=”GridView1″
runat=”server”
AllowPaging=”true”
PageSize=”10″
DataKeyNames=”KategoriID”
DataSourceID=”ObjectDataSource1″
AutoGenerateColumns=”false”>
<Columns>
<asp:CommandField ShowEditButton=”true” EditText=”Güncelle” />
<custom:CustomPage></custom:CustomPage>
<asp:BoundField DataField=”KategoriID” HeaderText=”Kategori ID” />
<asp:BoundField DataField=”KategoriAdi” HeaderText=”Kategori Adı” />
<asp:BoundField DataField=”Aciklama” HeaderText=”Açıklama” />
<asp:BoundField DataField=”KategoriAktif” HeaderText=”Kategori Aktif” />
</Columns>
</asp:GridView>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Şimdi Oluşturduğumuz Tasarımımızın Code Behind Kısmına Gidelim Ve Aşağıdaki Gibi Kodlarımızı Yazalım.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
public partial class Default3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!this.Page.IsPostBack)
{
Category_BLL bll = new Category_BLL();
GridView2.DataSource = bll.Kategorileri_Getir();
GridView2.DataBind();
}
}
protected void btnSave_Click(object sender, EventArgs e)
{
string kategoriAdi = txtKategoriAdi.Text;
string aciklama = txtAciklama.Text;
int kategoriAktif = int.Parse(txtKategoriAktif.Text);
Category_BLL bll = new Category_BLL();
bll.KategoriKaydet(kategoriAdi, aciklama, kategoriAktif);
GridView2.DataSource = bll.Kategorileri_Getir();
GridView2.DataBind();
}
protected void btnUpdate_Click(object sender, EventArgs e)
{
string kategoriAdi = txtKategoriAdi.Text;
string aciklama = txtAciklama.Text;
int kategoriAktif = int.Parse(txtKategoriAktif.Text);
int kategoriID = int.Parse(txtKategoriID.Text);
Category_BLL bll = new Category_BLL();
bll.KategoriGuncelle(kategoriAdi, aciklama, kategoriAktif, kategoriID);
GridView2.DataSource = bll.Kategorileri_Getir();
GridView2.DataBind();
}
protected void btnDelete_Click(object sender, EventArgs e)
{
int kategoriID = int.Parse(txtKategoriID.Text);
Category_BLL bll = new Category_BLL();
bll.KategoriSil(kategoriID);
GridView2.DataSource = bll.Kategorileri_Getir();
GridView2.DataBind();
}
}
Projemizi Tasarladıktan Sonra Ve Kodlarımızı Yazdıktan Sonra Projemizin En Son Hali Aşağıdaki Gibi Olacaktır.
Evet Aşağıda 2 Adet GridView Görünmektedir Bunlardan İlki Custom Olarak BLL Class Ouşturduğumuz Ve Handle el İle Yaptığımız Uygulama,
Diğeri İse İse ObjectDataSource Kullanarak Yaptığımız Bir Uygulama,
Aslına Bakarsanız O Kadar Çok Şey Yaptık Ki Sırasıyla Hepsini İzah edecek Olursak
1 – Xml Schema Data Yapısını Derinlemesine Öğrendik( Select,Insert,Update,Delete,Scalar Ve Store Procedure )Yapılarına Değindik,
2 – XML Schema Data Yapısını Bir Adım İleri Taşıyarak Kendi BLL Sınıfımızı Oluşturduk( Custom BLL),
3 – Kendi Sayfalama Yapımızı Öğrendik( Custom Paging ),
4 – GridView’imiz İçin CustomDeleteButton Sınıfını Kullanarak Seçilen Satırı Silmek İstediğimizde Silinmeden Önce Bizi Uyarmasını Sağlamış Olduk.
Projemizin Son Hali Aşağıdaki Gibidir,




Evet Geldik Bir Makalemizin Daha Sonuna,
Umarım Faydalı Olmuştur
Bir Daha Ki Makalede Görüşmek Üzere Hoşçakalın.
Giriş
Kategoriler
Arşivler
Takvim
Son YazIlar
- Mevlit Kandiliniz Mübarek Olsun
- Dünyanın en karanlık kahramanı yeniden sürüyor : HAYALET SÜRÜCÜ 2 İNTİKAM ATEŞİ
- Ya Ben İstanbul’u Alacağım, Ya İstanbul Beni ! : FETİH 1453
- Lost’un yaratıcısı J.J. Abrams’tan yeni dizi :ALCATRAZ
- Gurbetçi Rocky’nin komik hikayesi: BERLİN KAPLANI
- Uluslararası Çok Satan Üçlemeden :EJDERHA DÖVMELİ KIZ
- Hoşgeldin 2012
- Geri sayım başlasın ! : YILBAŞI GECESİ
- Plansız.Desteksiz.Seçimsiz :GÖREVİMİZ TEHLİKE 4
- Akıllı ve karizmatik dedektif Sherlock Holmes, en büyük düşmanı Profesör Moriarty’e karşı : Sherlock Holmes: Gölge Oyunları
Son Yorumlar
- Lost’un yaratıcısı J.J. Abrams’tan yeni dizi :ALCATRAZ için Güray
- Aşkın klişelerine karşı alaycı bir tavır takınmak,sizi gerçek aşka karşı kör mü yapar?: ARKADAŞTAN ÖTE için genceaydin
- Windows 7 Kurulum Sorunu (Çözümü) için Güray
- Windows 7 Kurulum Sorunu (Çözümü) için expert_-_man
- Müzik dinlemenin en hızlı ve en kolay yolu myFizy.com için Güray
- 64 bit İşletim Sisteminde 32 bitlik dll ve ocx Dosyalarını .Net’le(Dotnet) import Etme Sorununun Çözümü için Umut Sinan Şirin
- 64 bit İşletim Sisteminde 32 bitlik dll ve ocx Dosyalarını .Net’le(Dotnet) import Etme Sorununun Çözümü için gurultu12
- 64 bit İşletim Sisteminde 32 bitlik dll ve ocx Dosyalarını .Net’le(Dotnet) import Etme Sorununun Çözümü için Umut Sinan Şirin
- 64 bit İşletim Sisteminde 32 bitlik dll ve ocx Dosyalarını .Net’le(Dotnet) import Etme Sorununun Çözümü için gurultu12
- İhanet Noktası (Dan Brown) için pesimist
En Çok Okunanlar
- Eset Nod32 Antivirüs ekrn.exe Sorunu (Çözümü) - 20.897 kere okundu.
- Windows 7 Kurulum Sorunu (Çözümü) - 15.535 kere okundu.
- Skyfire 4.3.2.1_3001 Hatası (Symbian ve Windows Mobile Çözümü) - 13.085 kere okundu.
- Nokia 5800 Temaları - 11.868 kere okundu.
- Golden Retriever - 11.347 kere okundu.
- Kilyos - 9.628 kere okundu.
- Şemsiye Tarihçesi - 8.583 kere okundu.
- “o” an fotoğrafları - 7.273 kere okundu.
- Prag - 6.752 kere okundu.
- Nokia 5800 Programlar 1 - 5.874 kere okundu.
- IPhone 2 Çıktı ve Satışta.. - 5.169 kere okundu.
- Barış Manço - 4.935 kere okundu.
- Sigarayı İlk Kim Keşfetti? - 4.925 kere okundu.
- BİSİKLET - 4.591 kere okundu.
- Windows XP’nin Ölüm Tarihi Uzatıldı - 4.327 kere okundu.
Etiket Bulutu
WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.


Bu Yazı 1.281 kere okundu.