Bu yazimizda Tree yapisini veritabaninda nasil tutabilecegimizi görecegiz.

Tree Yapısını Veritabanında Tutma

Merhabalar.
Bu yazimizda Tree yapisini veritabaninda nasil tutabilecegimizi görecegiz.

1. Veritabaninda tablomuzu olusturalim.

Tree yapisini tutacak olan tablomuzu olusturalim.
CREATE TABLE [dbo].[tblCategory]
(
      [fldRelationId] [int] NOT NULL,
      [fldRowId] [int] IDENTITY(1,1) NOT NULL,
      [fldType] [int] NULL,
      [fldName] [nvarchar](50) NULL,
      [fldDescription] [text] NULL,
      CONSTRAINT [PK_tblCategory] PRIMARY KEY CLUSTERED
      (
            [fldRelationId] ASC,
            [fldId] ASC
      )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

 

Burada tablomuzun alanlari
fldId alani otomatik artarak o satirin anahtarini olusturmaktadir.
fldRelationId alani ise bulunulan satirin üst Id si verilerek o satiri bir üst satirla iliskilendirebiliriz.
Örnek olarak.

fldRelationId fldRowId fldName fldDescription
-1 1 Yönetim Yönetim Departmani
1 2 Pazarlama Pazarlama Departmani
1 3 Muhasebe Muhasebe Departmani
1 4 Bilgi Islem Bilgi Islem Departmani
2 5 Yurt Içi Pazarlama Yurt Içi Pazarlama Departmani
2 6 Yurt Disi Pazarlama Yurt Disi Pazarlama Departmani
3 7 Üretim Muhasebe Üretim Muhasebe Departmani
4 8 Donanim Network Donanim Network Departmani

4

9 Yazilim Yazilim Departmani

Yukaridaki verilere göre tree yapimiz asagidaki gibi olusacaktir.

  • Yönetim
    • Pazarlama
      • Yurt Içi Pazarlama
      • Yurt Disi Pazarlama
    • Muhasebe
      • Üretim Muhasebe
    • Bilgi Islem
      • Donanim Network
      • Yazilim 
Tablomuzdan Verileri Getirecek Stored Procedure.
-- Bize tablomuzdaki istedigimiz gruba ait alt kayitlari getirir.
Create Procedure sp_GetCategoryByRelation
      @fldRelationId int
as
begin
      Select fldId, fldRelationId, fldName, fldDescription
      From tblCategory
      Where fldRelationId=@fldRelationId
end
 
 
-- Istediðimiz grubun alt kayitlarinin sayisini gösterir.
Create Procedure sp_GetSubCategoryCount
      @fldRelationId int
as
begin
      Select COUNT(*)
      From tblCategory
      Where fldRelationId=@fldRelationId
End

 


Bu procedure de bizim elimizde bulunan bir satira ait alt satirlarin kaydini getirmesini istiyoruz. Root (Ana kirilim) in baslangicini -1 olarak belirlemistik. Dolayisiyla ilk isteyecegimiz yer -1 satiri olacak. Bu satiri istedikten sonra o satirin Id sini tekrar stored procedure e verdigimizde bize verileri çorap sökügü gibi en alta dogru getirecek.

Sira bu procedure den verileri alip treelist e node olarak ekleyecek procedure ü yazmaya geldi. Bu procedure de daha önce yayinlamis oldugumuz Database class indan faydalanacagiz.

 

Tree yapisini TreeNode a yerlestiren kod.
public void ExecuteTreeNode(int intParentId, ref TreeNode Returned)
{
    try
    {
        Database db = new Database();
        SqlParameter[] _Params = new SqlParameter[1];
        _Params[0] = new SqlParameter("@fldRelationId", intParentId);
 
        DataTable _Node = db.ExecuteProcedure("sp_GetCategoryByRelation", ref _Params);
 
        foreach (DataRow item in _Node.Rows)
        {
            TreeNode TN = new TreeNode();
            TN.Text = item["fldName"].ToString();
            TN.Tag = Convert.ToInt32(item["fldId"]);
            TN.ToolTipText = item["fldDescription"].ToString();
            _Params = new SqlParameter[1];
            _Params[0] = new SqlParameter("@fldRelMenuId", Convert.ToInt32(item["fldMenuId"]));
            bool saved = false;
            if (db.ExecuteProcedure("sp_GetSubCategoryCount", _Params, saved) > 0)
            {
                db.ExecuteTreeNode(Convert.ToInt32(item["fldMenuId"]), ref TN);
            }
            Returned.Nodes.Add(TN);
        }
    }
    catch (Exception ex)
    {
 
    }
    finally
    {
    }
}

Gerekli kodumuzu yazdik. Yukaridaki kodlar bize gerekli tree yi veritabanindan çekip alt kirilimlariyla birlikte verecek. Bunu Form umuz üzerine bir TreeList koyarak treenode unu dolu bir sekilde isteyebiliriz. Ben Formuma tvwOrganizasyon adini verdim. Buna göre TreeList imin içerisi asagidaki kod ile dolmus olacak.

 

Olusturdugumuz Form un Load kismi.
private void frmTreeTest_Load(object sender, EventArgs e)
{
    TreeNode mTreeNode = new TreeNode();
    mTreeNode.Text = "Organizasyon Semasi";
    mTreeNode.ToolTipText = "Sema";
    mTreeNode.Tag = -1;
    Database db = new Database();
    db.ExecuteTreeNode(-1, ref mTreeNode);
    tvwOrganizasyon.Nodes.Add(mTreeNode);
    tvwOrganizasyon.ExpandAll();
}

 

 

İlgili Makaleler

Bu yazıya 0 yorum yapılmış.

Yorum Gönder