PDA

View Full Version : پر کردن treeView



fakhravari
یک شنبه 08 تیر 1393, 20:24 عصر
سلام
private void button2_Click(object sender, EventArgs e) {
TreeNode treeNode = new TreeNode("Windows");
treeView1.Nodes.Add(treeNode);


TreeNode node2 = new TreeNode("C#");
TreeNode node3 = new TreeNode("VB.NET");
TreeNode[] array = new TreeNode[] { node2, node3 };


treeNode = new TreeNode("فصل اول", array);
treeView1.Nodes.Add(treeNode);
}

من چطوری میتونم به مثلا ایتم VB.NET یک value هم بدم در انتخاب بتونم ادرس فایل ازش بخونم؟

Rejnev
یک شنبه 08 تیر 1393, 20:31 عصر
هم میتونی از پراپرتی تگ استفاده کنی هم میتونی یک کلاس بنویسی که از TreeNode ارث میبره و مثلا یک پراپرتی با نام Value توش اضافه کنی.
مورد اول که راحت تر هم هست:

TreeNode node3=new TreeNode();
node3.Text="VB.NET";
node3.Tag="e:\\a.txt";

fakhravari
یک شنبه 08 تیر 1393, 21:53 عصر
مقدار دهی مشکل داره؟
TreeNode[] array = new TreeNode[dt2.Rows.Count]; TreeNode treeNode = new TreeNode("");
for (int b = 1; b <= dt2.Rows.Count; b++)
{
array[b].Tag = dt2.Rows[i]["FileName"].ToString();
array[b].Text = dt2.Rows[i]["Name"].ToString();
}

خطا به array[b] میرسه

fakhravari
یک شنبه 08 تیر 1393, 23:47 عصر
private void Form1_Load(object sender, EventArgs e) {
treeView1.Nodes.Clear();


try
{
DataSet dss = new DataSet();
dss.ReadXml("tblNodes.xml");
DataTable dt = dss.Tables[0];


DataRow[] tt = dt.Select("ParentID > 0");
DataTable qqq = dt.Clone();
foreach (DataRow d in tt)
{
qqq.ImportRow(d);
}


int[] IDRow = new int[qqq.Rows.Count];
for (int i = 0; i < IDRow.Length; i++)
{
IDRow[i] = Convert.ToInt32(qqq.Rows[i]["ID"].ToString());
}




for (int i = 0; i < dt.Rows.Count; i++)
{
int ID = 0;
try
{
ID = Convert.ToInt32(dt.Rows[i]["ID"].ToString());
}
catch { ID = 0; }


DataView dataView = dt.DefaultView;
dataView.RowFilter = "ParentID = " + ID;
DataTable dt2 = dataView.ToTable();


if (dt2.Rows.Count > 0)
{
TreeNode treeNode = new TreeNode("");
List<TreeNode> ss = new List<TreeNode>();
for (int b = 0; b < dt2.Rows.Count; b++)
{
string s = dt2.Rows[b]["Name"].ToString();
string FileName = dt2.Rows[b]["FileName"].ToString();


TreeNode node2 = new TreeNode(s);
node2.Tag = FileName; node2.Text = s;
ss.Add(node2);
}


TreeNode[] array = new TreeNode[ss.Count];
for (int b = 0; b < ss.Count; b++)
{
array[b] = ss[b];
}


treeNode = new TreeNode(dt.Rows[i]["Name"].ToString() + "", array);
treeView1.Nodes.Add(treeNode);


}
else
{
if (Array.IndexOf(IDRow, Convert.ToInt32(dt.Rows[i]["ID"].ToString())) < 0)
{
TreeNode treeNode = new TreeNode(dt.Rows[i]["Name"].ToString());
treeNode.Tag = dt.Rows[i]["FileName"].ToString();
treeView1.Nodes.Add(treeNode);
}
}
}
}
catch { }
}

Rejnev
دوشنبه 09 تیر 1393, 16:50 عصر
وقتی آرایه از اشیا میسازید، باید از تک تک اشیا نمونه بسازید تا بشه استفاده کرد:


TreeNode[] nodes=new TreeNode[10];
for(i=0; i<10; i++)
{
nodes[i]=new TreeNode("Some Title");
nodes[i].Tag="e:\\a.txt";
//...
}

fakhravari
دوشنبه 09 تیر 1393, 17:35 عصر
در مورد parent ها چطوری میتونم تو در تو درست کنم.
اگه ممکنه یه سمل بزارید

Rejnev
دوشنبه 09 تیر 1393, 17:46 عصر
واضح تر بگید، درست متوجه نشدم

fakhravari
سه شنبه 10 تیر 1393, 05:56 صبح
چطوری جدولی داشته باشیم منو تو درتو تعریف کنیم.

nice_boy_a
سه شنبه 10 تیر 1393, 12:21 عصر
واسه منوهای تو در تو باید از جدول پدر فرزندی استفاده کرد.
کد منو، نام منو، کد پدر و فیلدهای مورد نیاز!

fakhravari
سه شنبه 10 تیر 1393, 15:55 عصر
بله میدونم چطوری داده ها را فراخونی کنم در tree

fakhravari
سه شنبه 10 تیر 1393, 17:08 عصر
یه سمپل پیدا کردم.

جدول Acc_Group < ID_Group - Name_Group
جدول Acc_Koll > ID_Koll - ID_Group - Name_Koll
کد ارتباط
private void button1_Click(object sender, EventArgs e) {
OleDbConnection con = new OleDbConnection(ConnectionString);
con.Open();
DataSet ds = new DataSet();
OleDbDataAdapter adapter1 = new OleDbDataAdapter();
OleDbDataAdapter adapter2 = new OleDbDataAdapter();


string text1 = "Select ID_Group,Name_Group from Acc_Group";
string text2 = "Select ID_Group,Name_Koll from Acc_Koll";


new OleDbDataAdapter(text1, con).Fill(ds, "Acc_Group");
new OleDbDataAdapter(text2, con).Fill(ds, "Acc_Koll");


ds.Relations.Add("GroupToKoll", ds.Tables["Acc_Group"].Columns["ID_Group"], ds.Tables["Acc_Koll"].Columns["ID_Group"]);


foreach (DataRow row1 in ds.Tables["Acc_Group"].Rows)
{
TreeNode node1 = new TreeNode();
node1.Text = row1["Name_Group"].ToString();
treeView1.Nodes.Add(node1);


foreach (DataRow row2 in row1.GetChildRows("GroupToKoll"))
{
TreeNode node2 = new TreeNode();
node2.Text = row2["Name_Koll"].ToString();
node1.Nodes.Add(node2);
}
}
}

چطوری میتونم تو در تو ترش کنم
مثلا به String یه بخش اضافه کنم

nice_boy_a
سه شنبه 10 تیر 1393, 19:27 عصر
باید تابع بازگشتی بنویسی

fakhravari
سه شنبه 10 تیر 1393, 21:18 عصر
عزیز دل برادر خوب میدونم داستانو.
نمیدونم چطوری پیادش کنم.
بابا یه کدی چیزی بده

nice_boy_a
سه شنبه 10 تیر 1393, 23:49 عصر
عزیز دل برادر خوب میدونم داستانو.
نمیدونم چطوری پیادش کنم.
بابا یه کدی چیزی بده

چرا عصابی میشی خو!

لینک 1 (http://www.codeproject.com/Articles/24642/Loading-a-treeview-to-n-levels)
لینک 2 (http://www.w3spark.com/asp-net/how-to-populate-an-asp-net-n-level-tree-view-recursively/)
لینک 3 (http://www.dotnetspider.com/resources/28676-Populate-TreeView-From-DataBase-Using-Recursive.aspx)

fakhravari
چهارشنبه 11 تیر 1393, 14:19 عصر
مرسی
nice_boy_a (http://barnamenevis.org/member.php?167371-nice_boy_a)
لینک لینک 3 (http://www.dotnetspider.com/resources/28676-Populate-TreeView-From-DataBase-Using-Recursive.aspx)

private static DataTable D1 = new DataTable(); private void Form1_Load(object sender, EventArgs e)
{
treeView1.Nodes.Clear();


DataSet PrSet = new DataSet();
PrSet.ReadXml(@"tree.xml");
D1 = PrSet.Tables[0];

Load_tree();
}
private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
try
{
if (treeView1.SelectedNode.Tag.ToString() == "") return;


if (File.Exists(@"File/" + treeView1.SelectedNode.Tag.ToString()))
axAcroPDF1.LoadFile(@"File/" + treeView1.SelectedNode.Tag.ToString());
else
MessageBox.Show("فایل موجود نمی باشد : " + treeView1.SelectedNode.Text);
}
catch { }
}
public void Load_tree()
{
treeView1.Nodes.Clear();
foreach (DataRow dr in D1.Rows)
{
if (Convert.ToInt32(dr["ParentID"]) == 0)
{
TreeNode tnParent = new TreeNode();
tnParent.Text = dr["Name"].ToString();
tnParent.Tag = dr["FileName"].ToString();
string value = dr["ID"].ToString();
tnParent.Expand();
treeView1.Nodes.Add(tnParent);
FillChild(tnParent, value);
}
}
}
public int FillChild(TreeNode parent, string ID)
{
DataRow[] tt = D1.Select("ParentID =" + ID);
DataTable D2 = D1.Clone();
foreach (DataRow d in tt)
{
D2.ImportRow(d);
}


if (D2.Rows.Count > 0)
{
foreach (DataRow dr in D2.Rows)
{
TreeNode child = new TreeNode();
child.Text = dr["Name"].ToString().Trim();
child.Tag = dr["FileName"].ToString();
string temp = dr["ID"].ToString();
child.Collapse();
parent.Nodes.Add(child);
FillChild(child, temp);
}
return 0;
}
else
{ return 0; }
}

fakhravari
چهارشنبه 11 تیر 1393, 17:17 عصر
من ند ها را داینامیک درست میکنم چطوری میتونم عکس به اونا بدم؟:متفکر:

khokhan
چهارشنبه 11 تیر 1393, 17:28 عصر
من ند ها را داینامیک درست میکنم چطوری میتونم عکس به اونا بدم؟:لبخند::لبخند::متفکر:

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

treeView1.Nodes.Clear();
//// set root node of TreeView.
treeView1.Nodes.Add("طبقات");
treeView1.Nodes[0].ImageIndex = 0;
treeView1.Nodes[0].SelectedImageIndex = 0;
treeView1.Nodes[0].Tag = "RootDB";

fakhravari
چهارشنبه 11 تیر 1393, 18:58 عصر
خب ادرس عکس از کجا میاد:متفکر:

khokhan
چهارشنبه 11 تیر 1393, 20:21 عصر
خب ادرس عکس از کجا میاد:متفکر:
یه imageList به فرم اضافه می کنی و عکسها رو می ریزی توش و اندیس هر کدوم از عکسهای داخلش رو به هرکدوم از نودها اختصاص می دی ...
کد مربوط به اختصاص اندیسها رو هم که توی پست بالا یی گذاشتم

fakhravari
پنج شنبه 12 تیر 1393, 20:01 عصر
با سلام
من 3 حالت عکس دارم
+ - و حالت بدون root
چزوری اعمال کنم بر اساس کد لینک 3 دوستمون