12
Oca
2010

Asp.Net İle BLL Ve ObjectDataSource Kullanımı

Author    Category .NET, Bilgisayar, sql     Tags , , , , , , ,     Okunma Sayısı Bu Yazı 1.281 kere okundu.

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,

Resim_1

Resim_2

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

Resim_3

Resim_4

Resim_5

Resim_6

Resim_7

Resim_8

Resim_9

Resim_10

Resim_11

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

Resim_12

Resim_13

Resim_14

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

Resim_15

Resim_16

Resim_17

Resim_18

Resim_19

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.

Resim_20

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.

Resim_21

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

Resim_22

Resim_23

Resim_24

Resim_25

Resim_26

Resim_27

Resim_28

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

Resim_29

Resim_30

Resim_31

Resim_32

Resim_33

Resim_34

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” />&nbsp;
<asp:Button ID=”btnUpdate” runat=”server” Text=”Güncelle”
onclick=”btnUpdate_Click”/>&nbsp;
<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,

Resim_35

Resim_36

Resim_37

Resim_38

Evet Geldik Bir Makalemizin Daha Sonuna,
Umarım Faydalı Olmuştur
Bir Daha Ki Makalede Görüşmek Üzere Hoşçakalın.

Blog Widget by LinkWithin

Yorum Yapın

Yazıya yorum yapmak için lütfen Giriş yapınız.

Giriş

Facebook

Kategoriler

Arşivler

Takvim

Şubat 2012
Pts Sal Çar Per Cum Cts Paz
« Oca    
 12345
6789101112
13141516171819
20212223242526
272829  

Son YazIlar

Son Yorumlar

En Çok Okunanlar

Etiket Bulutu

Anket

Mobil İşletim Sistemi olarak hangisini tercih ediyorsunuz?

Sonuçları göster

Loading ... Loading ...

Kimler Çevrimiçi

Şuanda 15 ziyaretçi çevrimiçi
6 ziyaretçi, 9 robot, 0 üye
Yapımcısı Ziyaretçi Haritası

Reklam AlanI