PDA

View Full Version : خواندن اطلاعات از دو جدول و پر کردن TreeView



MasoudAdmin
شنبه 13 مهر 1398, 20:54 عصر
با سلام به همه
من دو تا جدول دارم که یکی برای سطح بندی هست و یکی از جداول هم اطلاعات کاربر و سطح اون رو از جدول سطح پر می کنه.
جدول سطح من


LevelTitle
LevelID


سطح یک
1


سطح دو
2


سطح سه
3


و جدول کاربران


LevelID
FullName
UserID


1
Test1
1


1
Test2
2


1
Test3
3


2
Test4
4


2
Test5
5


3
Test6
6


1
Test7
7


3
Test8
8



حالا می خوام یک TreeView داشته باشم که اول نودهای اصلی رو از جدول سطح بخونه و بعد از جدول کاربران، کاربرانی که در سطح اون نود اصلی هستند قرار بگیرند.
یعنی نتیجه مثل تصویر نمایش داده شود.
150803
ممنون میشم کمک کنید.

MasoudAdmin
یک شنبه 14 مهر 1398, 17:05 عصر
کسی نیست من رو راهنمایی و یاری کند؟:افسرده::ناراحت:

ASHKANLAEI
یک شنبه 14 مهر 1398, 17:46 عصر
فقط لازمه یک حلقه برای جدول 1 بسازین و در اون، علاوه بر اضافه نمودن خود نام سطح، یک حلقه برای جستجو در جدول 2 و نوشتن ردیف های با id برابر، هم قرار بدین.

MasoudAdmin
یک شنبه 14 مهر 1398, 20:44 عصر
با سلام
این تکه کد که نودهای اصلی رو پر کردم. حالا تو این حلقه چجوری یک حلقه دیگه بگذارم؟

while (DrLevel.Read()) {
TreeNode Node = new TreeNode(DrLevel["LevelID"].ToString().Trim());
this.tvMembers.Nodes.Add(Node);
}
DrLevel.Close();
ممنون میشم راهنمایی کنید.

ASHKANLAEI
دوشنبه 15 مهر 1398, 15:00 عصر
بعد از خط دو این کد را قرار دهید:
while (DrUser.Read()) {
TreeNode cNode = new TreeNode(DrUser["FullName"].ToString().Trim());
if (DrUser["LevelID"].ToString().Trim() == DrLevel["LevelID"].ToString().Trim()) Node.Nodes.Add(cNode);
}DrUser.Close();

MasoudAdmin
دوشنبه 15 مهر 1398, 20:28 عصر
با سلام.
من کد رو به صورت زیر تغییر دادم:


oleDbCmdMain.CommandText = "Select * From Tbl_Level ORDER BY LevelID";
OleDbDataReader DrLevel = this.oleDbCmdMain.ExecuteReader();
oleDbCmdUsers.CommandText = "Select * From VW_MembersByRoot";
OleDbDataReader DrUser = this.oleDbCmdUsers.ExecuteReader();
while (DrLevel.Read())
{
TreeNode Node = new TreeNode(DrLevel["LevelID"].ToString().Trim());
this.tvMembers.Nodes.Add(Node);
while (DrUser.Read())
{
TreeNode cNode = new TreeNode(DrUser["FullName"].ToString().Trim());
if (DrUser["LevelID"].ToString().Trim() == DrLevel["LevelID"].ToString().Trim())
Node.Nodes.Add(cNode);
}
DrUser.Close();
}
DrLevel.Close();

ولی خطا داره:
System.InvalidOperationException: 'Invalid attempt to call Read when reader is closed.'
:افسرده::افسرده::ناراحت::نار حت:
ممنون میشم راهنمایی کنید تا کد رو اصلاح کنم و خطاش رفع بشه.

ASHKANLAEI
سه شنبه 16 مهر 1398, 06:47 صبح
druser.close رو به آخر کد و کنار اون یکی منتقل کن و از حلقه درش بیار

MasoudAdmin
سه شنبه 16 مهر 1398, 18:55 عصر
خطای کد رفع شد ولی باز فقط اولین Node رو پر میکنه و بقیه Nodeها خالی میمونه.:متفکر::ناراحت:

ASHKANLAEI
سه شنبه 16 مهر 1398, 19:48 عصر
oleDbCmdMain.CommandText = "Select * From Tbl_Level ORDER BY LevelID";
OleDbDataReader DrLevel = this.oleDbCmdMain.ExecuteReader();

while (DrLevel.Read())
{
TreeNode Node = new TreeNode(DrLevel["LevelID"].ToString().Trim());
this.tvMembers.Nodes.Add(Node);

oleDbCmdUsers.CommandText = "Select * From VW_MembersByRoot";
OleDbDataReader DrUser = this.oleDbCmdUsers.ExecuteReader();
while (DrUser.Read())
{
TreeNode cNode = new TreeNode(DrUser["FullName"].ToString().Trim());
if (DrUser["LevelID"].ToString().Trim() == DrLevel["LevelID"].ToString().Trim())
Node.Nodes.Add(cNode);
}
DrUser.Close();
}
DrLevel.Close();

MasoudAdmin
سه شنبه 16 مهر 1398, 20:55 عصر
سپاس فراوان.:تشویق::تشویق: