PDA

View Full Version : مشکل در نحوه ایجاد ساختاری شبیه این عکس



setareh2013
شنبه 03 خرداد 1393, 11:37 صبح
با سلام
کسی می دونه چه طوری می تونم ساختاری شبیه این عکس رو پیاده سازی کنم .
تیتر ها در این عکس که نام شعرا هست از یک جدول دیتابیس خوانده می شوند و لیست کتابهای آنها از یک جدول دیگر به نام book گرفته می شوند که یک کلیدخارجی دارند که به آی دی شاعر از جدول شعرا اشاره دارد
با تشکر
119425

hamid_hr
شنبه 03 خرداد 1393, 11:43 صبح
با treeview میشه نمایش داد

setareh2013
شنبه 03 خرداد 1393, 13:32 عصر
من با treeview نمی دونم چه طوری کار کنم چند تا سورس زبان اصلی پیدا کردم ولی نفهمیدم چه طوریه

kavayo
شنبه 03 خرداد 1393, 14:52 عصر
به لینک های زیر مراجعه کن :
http://www.dotnetperls.com/treeview
http://www.java2s.com/Code/CSharp/GUI-Windows-Form/TreeViewExample.htm
http://www.youtube.com/watch?v=PNIZDLFPmXE

setareh2013
چهارشنبه 14 خرداد 1393, 13:33 عصر
سلام
من کد زیر رو نوشتم ، به صورت درختی نشون میده . ولی نمی دونم اگه بخوام از دیتابیس بخونم باید چه کار کنم . چون تعداد نودها در دیتابیس مشخص نیست و دائم در حال افزایشه ، هر بار چه طوری یک نود جدید تعریف کنم ؟

TreeNode tn1 = new TreeNode("node1");

treeView1.Nodes.Add(tn1);


TreeNode tn2 = new TreeNode("node2");

treeView1.Nodes.Add(tn2);


TreeNode tn4 = new TreeNode("node4");


TreeNode tn5 = new TreeNode("node5");


TreeNode[] array = new TreeNode[] { tn4, tn5 };


TreeNode tn3 = new TreeNode("node3", array);

treeView1.Nodes.Add(tn3);

treeView1.ExpandAll();

CsharpNevisi
چهارشنبه 14 خرداد 1393, 14:06 عصر
// --------------- مثلا پایگاه داده ما میباشد ----------------------//
string strChildNodesAll = "کتاب اول,کتاب دوم,کتاب سوم,کتاب چهاوم,کتاب پنجم,کتاب ششم";// برای ادد کردن کتاب یه , بزار و اسم کتابو بنویس (,محسن فتحی)اینجوری
//------------- فیلد های پایگاه داده رو داخل یک ارایه میریزیم --//
string[] strChildNodes = strChildNodesAll.Split(',');
// ------------ تعداد کتاب ها را مشخص میکنیم ---------------------//
TreeNode[] child = new TreeNode[strChildNodes.Count()];
//-------------- متغییر برای پیماشی درون نودهای فرزند ----------//
int i = 0;
//-------------- مقدار دهی تودهای فرزند --------------------------//
foreach (string a in strChildNodes)
{
child[i] = new TreeNode(a);
i++;
}
TreeNode z = new TreeNode("محسن فتحی", child);
treeView1.Nodes.Add(z);

khokhan
چهارشنبه 14 خرداد 1393, 14:07 عصر
................................
بافرض اینکه محتویات ستونی از یک جدول رو در متغیر tblArray ذخیره کردیم :


for (int i = 0; i < tblArray.Count; i++)
{
treeView1.Nodes[0].Nodes.Add(tblArray[i].ToString());
treeView1.Nodes[0].ForeColor = System.Drawing.Color.Blue;
treeView1.Nodes[0].Nodes[i].Tag = "Tables";
treeView1.Nodes[0].Nodes[i].ImageIndex = 2;
treeView1.Nodes[0].Nodes[i].SelectedImageIndex = 2;
}

setareh2013
چهارشنبه 14 خرداد 1393, 18:50 عصر
ممنون از شما
من یک مشکل دیگه هم دارم اگه کمک کنید خیلی ممنون میشم
کسی می دونه چه طوری می تونم نود ها رو به صورت لینک دربیارم که با کلیک روی اونها ، رویداد خاصی رو براش تعریف کنم .؟

setareh2013
چهارشنبه 14 خرداد 1393, 21:32 عصر
کسی می تونه راهنماییم کنه ؟

CsharpNevisi
چهارشنبه 14 خرداد 1393, 22:43 عصر
برای این کار باید از رویداد AfterSelect خود treeView کمک بگیری ... !!!!
به این توجه کن ... !!!!

private void button1_Click(object sender, EventArgs e)
{
// --------------- مثلا پایگاه داده ما میباشد ----------------------//
string strChildNodesAll = "کتاب اول,کتاب دوم,کتاب سوم,کتاب چهاوم,کتاب پنجم,کتاب ششم";// برای ادد کردن کتاب یه , بزار و اسم کتابو بنویس (,محسن فتحی)اینجوری
//------------- فیلد های پایگاه داده رو داخل یک ارایه میریزیم --//
string[] strChildNodes = strChildNodesAll.Split(',');
// ------------ تعداد کتاب ها را مشخص میکنیم ---------------------//
TreeNode[] child = new TreeNode[strChildNodes.Count()];
//-------------- متغییر برای پیماشی درون نودهای فرزند ----------//
int i = 0;
//-------------- مقدار دهی تودهای فرزند --------------------------//
foreach (string a in strChildNodes)
{
child[i] = new TreeNode(a);
i++;
}
TreeNode z = new TreeNode("محسن فتحی", child);
treeView1.Nodes.Add(z);
}


private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
MessageBox.Show(treeView1.SelectedNode.Text);
}

khokhan
چهارشنبه 14 خرداد 1393, 23:15 عصر
کسی می تونه راهنماییم کنه ؟

.................................................. .....................................

setareh2013
شنبه 17 خرداد 1393, 18:06 عصر
سلام با تشکر از شما من لینک رو ایجاد کردم به این صورته که روی هر نام شاعرکه کلیک می کنم نام کتاب ها که که کلید خارجی شاعر داخلشون قرار داره در یک treeview دیگه نشون داده میشه .
با کد زیر

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)

{






string value = treeView1.SelectedNode.Text;

dt = cf.ShowShaerBook(value);



int counter = dt.Rows.Count;

treeView2.Nodes.Clear();


for (int i = 0; i < counter; i++)

{


if (dt.Rows[i]["btitle"].ToString() != null)

treeView2.Nodes.Add(dt.Rows[i][
"btitle"].ToString());


}



}

ولی نباید داخل یک تری ویو دیگه نشون داده بشه . هر کار می کنم که مثل عکس اول نام کتاب ها هم زیر نام شاعر داخل همان تری ویو 1 قرار بگیره نمیشه .
در این مورد میشه راهنماییم کنید ؟

CsharpNevisi
یک شنبه 18 خرداد 1393, 11:25 صبح
میشه یه عکس بزاری تا متوجه شم ؟؟؟

setareh2013
یک شنبه 18 خرداد 1393, 17:15 عصر
مثل عکسی که داخل پست یک گذاشتم .
در این عکس شاعرهای " ابوالفرج و ابوالمعالی و.... ) از یک جدول دیتابیس خونده میشن و کتابهای اونها در زیر نام هر شاعر هست که آی دی شاعران در جدول کتابها کلید خارجی هستش
با کدی که در پست قبلی نوشتم روی هر شاعر که کلیک می کنم کتابهای اون داخل یک تری ویو دیگه نشون داده میشه ولی میخوام مثل عکس لیست کتابهای هر شاعر زیر نام همون شاعر نشون داده بشه

khokhan
یک شنبه 18 خرداد 1393, 22:45 عصر
مثل عکسی که داخل پست یک گذاشتم .
در این عکس شاعرهای " ابوالفرج و ابوالمعالی و.... ) از یک جدول دیتابیس خونده میشن و کتابهای اونها در زیر نام هر شاعر هست که آی دی شاعران در جدول کتابها کلید خارجی هستش
با کدی که در پست قبلی نوشتم روی هر شاعر که کلیک می کنم کتابهای اون داخل یک تری ویو دیگه نشون داده میشه ولی میخوام مثل عکس لیست کتابهای هر شاعر زیر نام همون شاعر نشون داده بشه
heee:لبخند:
بهترین کار اینه که دیتاتیبل با تاکید بر ارتباط میان جداول ایجاد کنی و نودهای پدر و فرزند رو به این دیتاتیبل دارای ارتباط متل کنی
به این شکل :

private void Form1_Load(object sender, EventArgs e)
{
DataSet ds = new DataSet();
String strConn = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\shoeara.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlConnection conn = new SqlConnection(strConn);
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM books", conn);

SqlDataAdapter daCategories = new SqlDataAdapter("SELECT * FROM shaier", conn);

da.Fill(ds, "books");
daCategories.Fill(ds, "shaier");
ds.Relations.Add("book_shaier", ds.Tables["shaier"].Columns["sh_id"], ds.Tables["books"].Columns["sh_id"]);
foreach (DataRow dr in ds.Tables["shaier"].Rows)
{
TreeNode tn = new TreeNode(dr["sh_name"].ToString());
foreach (DataRow drChild in dr.GetChildRows("book_shaier"))
{
tn.Nodes.Add(drChild["book_name"].ToString());
}
treeView1.Nodes.Add(tn);
}
}

120017