Bu yazimizda Tree yapisini veritabaninda nasil tutabilecegimizi görecegiz.
- Yazılım Uzmanları
- 13 Mayıs 2018
- 2097 kez görüntülendi.
Tree Yapısını Veritabanında Tutma
Merhabalar.
Bu yazimizda Tree yapisini veritabaninda nasil tutabilecegimizi görecegiz.
1. Veritabaninda 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
- Pazarlama
-- 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.
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.
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();
}
|
Bu yazıya 0 yorum yapılmış.