PDA

View Full Version : آموزش: استفاده از کنترل Treeview برای مشاهده اطلاعات یک جدول self join و به صورت parent and child nodes



piroozman
چهارشنبه 04 مرداد 1391, 20:28 عصر
با سلام و احترام
در این تاپیک قصد دارم نحوه استفاده از یک جدول که به صورت Self join می باشد و به منظور ذخیره اطلاعاتی که خاصیت parent و child دارند اموزش بدهم. در این آموزش ساده از یک کنترل tree view برای مشاهده اطلاعات استفاده می کنیم.
در دیتابیس جدولی به شکل زیر و با نام t داریم

90228
این جدول ساده جهت نمایش واحدهای سازمانی یک ارگان به کار می رود. به طوری که هر واحد می تواند به صورت مستقل باشد یا اینکه به عنوان واحدی زیر مجموعه واحد دیگری باشد. واحدها می توانند به صورت تو در تو زیر مجموعه واحدهای دیگر باشند و الی آخر.
1- ابتدا یک برنامه از نوع window application ایجاد کنید و یک کنترل tree view و با نام treeViewبه آن اضافه کنید.
2- می بایست داده ها را از جدول موجود در دیتابیس فراخوانی نماید. من برای این کار از یک دیتاست و یک دیتاتیبل استفاده کرده ام و با استفاده از یک TableAdapter داده ها را از جدول موجود در دیتابیس به داخل دیتاتیبل وارد نمودم. این کا به صورت ویزارد در ویژوال استودیو صورت می پذیرد(خیلی ساده). فراخوانی تابع fill کنترل TableAdapter در رویداد load فرم صورت می پذیرد:
private void Form1_Load(object sender, EventArgs e)
{


//// TODO: This line of code loads data into the 'evaluationDataSet.t' table. You can move, or remove it, as needed.
tTableAdapter.Fill(evaluationDataSet.t);
}

3- برای سادگی آموزش من از سه خصیصه برای تعیین ستونهای دیتاتیبل استفاده کرده ام این سه خصیصه عبارتند از :
DataSource جهت تعیین جدول
UnitName جهت تعیین نام واحد سازمانی
ParentId جهت تعیین واحد پدر
ID شناسه واحد
4- نکته قابل توجه این است که واحدهای مستقل (یعنی خود فرزند واحد دیگری نباشند) مقدار فیلد parentId آنها برابر با null است. بنابراین با پیمایش در dataTable رکوردهایی که مقدار parentId آنها برابر null است به صورت گره به کنترل treeView اضافه می کنیم.
5- در نهایت با استفاده از تابعی تحت عنوان CreateNodesOfParent گره های فرزند هر گره پدر را یافته و به کنترل treeView و در مکان مناسب اضافه می کنیم. توجه کنید این تابع به صورت بازگشتی می باشد.
برنامه ای که ارائه شده است از ریشه به سمت برگها حرکت می کند.
به کد ها مراجعه کنید:
private void Form1_Load(object sender, EventArgs e)
{


//// TODO: This line of code loads data into the 'evaluationDataSet.t' table. You can move, or remove it, as needed.
tTableAdapter.Fill(evaluationDataSet.t);
DataSource = evaluationDataSet.t;
ID = "ID";
UnitName = "UnitName";
ParentId = "parentId";
this.Text = "Treeview control sample for show data from self join Table";
foreach (DataRow row in DataSource.Rows)
{
if (row[ParentId] == DBNull.Value)
{
TreeNode treeRoot;
treeRoot = new TreeNode();
treeRoot.Text = row[UnitName].ToString();
treeRoot.ExpandAll();
treeView.Nodes.Add(treeRoot);
CreateNodesOfParent(Convert.ToInt32(row[ID]), treeRoot);

}
}
}


public void CreateNodesOfParent(int iParent, TreeNode pNode)
{

DataView dvwData = new DataView(evaluationDataSet.t);
dvwData.RowFilter = String.Format("{0}={1}", ParentId, iParent);

foreach (DataRowView Row in dvwData)
{
TreeNode zNode = pNode.Nodes.Add(Row[UnitName].ToString());
CreateNodesOfParent(Int32.Parse(Row[ID].ToString()), zNode);
}
}

#region Property

public DataTable DataSource{get;set;}
public String UnitName{get;set;}
public String ParentId{get;set;}
public String ID{get;set;}
#endregion
با توجه به دادهای موجود در جدول نتیجه به صورت زیر قابل مشاهده می باشد:

90231

در صورتی که نظر خاصی در مورد کدها دارید لطف کنید بفرمایید.
http://barnamenevis.org/images/misc/pencil.png

تبسم ساینا
پنج شنبه 07 فروردین 1393, 20:28 عصر
سلام
میشه بگید در این کد tTableAdapter.Fill(evaluationDataSet.t);منظور از evaluationDataSet.t
چیه؟