0 امتیاز

با درود خدمت اساتید

من در برنامم دو جدول دارم که بشرح زیر هست :

جدول اول  tbl_BookType  شامل فیلدهای bookTypeId  و bookTypeDesc

جدول دوم tbl_Book شامل فیلدهای bookId - bookName - bookWriter- bookTypeIdFk

و دو جدول با استفاده از فیلدهای bookTypeId  و bookTypeIdFk  با هم ارتباط دارند

حالا میخوام در TreeView  بر ابتدا بر اساس نوع کتاب (bookTypeDesc ) و بعد در هر نوع کتابی که خمون زیر گره میشه عناوین کتابهای که در گروه خاص هستن نمایش داده بشه . از کد زیر استفاده میکنم و در مرحله گره اصلی مشکلی نیست ولی زیرگره رو نمیتونم نمایش بدم . لطفا راهنمایی بفرمایید

 DataTable dt=new DataTable();
            dt = db.SelectData("select * from tbl_Book");
            dataGridViewX1.DataSource = dt;
            //==================================================
            //==fill treeview
            DataTable dtNodeBookType = new DataTable();
            DataTable dtNodBookName = new DataTable();

            dtNodeBookType = db.SelectData("select * from tbl_BookType order by bookTypeDesc,bookTypeId");
            dtNodBookName = db.SelectData("select * from tbl_Book order by bookName,bookId");

            for (int i = 0; i < dtNodeBookType.Rows.Count; i++)
            {
                treeView1.Nodes.Add(dtNodeBookType.Rows[i].ItemArray[1].ToString());

                int num = dtNodeBookType.Rows.Count - 1;

                for (int j = 1; j < dtNodBookName.Rows.Count; j++)
                {
                    treeView1.Nodes[i].Nodes.Add(dtNodBookName.Rows[num].ToString());
                }

            }

 

بسته شده

1 پاسخ

0 امتیاز
 
بهترین پاسخ

سلام ، اشکال در حلقه for داخلی هستش . ببینید شما باید یک شرط بزارید در این حلقه :

if (dtNodBookName.Rows[j].ItemArray[2].ToString() == dtNoDeBookType.Rows[i].ItemArray[0].ToString())
{
	treeView1.Nodes[i].Nodes.Add(dtNodBookName.Rows[j].ItemArray[1].ToString());
}

البته من به احتمال زیاد اندیس ها رو اشتباه گذاشتم و شما باید اصلاح کنید . ببینید شما باید کتاب های هر دسته رو در اون دسته خاص قرار بدین . برای اینکار باید بررسی کنیم که آیا اصلا این کتاب فعلی در این دسته هست یا نه ؟ خوب Id دسته رو به راحتی میشه بدست آورد ( از طریق حلقه for خارجی ) و باید با BookTypeId کتاب فعلی که از طریق حلقه for داخلی بدست میاد مقایسه کنیم . اگر برابر بودن باید به زیر Nod فعلی اضافه بشه . 

 

** حلقه for داخلی رو هم از 0 شروع کنید . 

for (int j = 0; j < dtNodBookName.Rows.Count; j++)
{
	if (dtNodBookName.Rows[j].ItemArray[2].ToString() == dtNoDeBookType.Rows[i].ItemArray[0].ToString())
	{
		treeView1.Nodes[i].Nodes.Add(dtNodBookName.Rows[j].ItemArray[1].ToString());
	}   
}

 

در حلقه بالا من فرض رو بر این گرفتم که ستون BookTypeIdFK سومین ستون هستش ( با اندیس 2 ) و در جدول tbl_BookType ستون BookTypeId اولین ستون هست . اندیس ها رو به به شکل درست جابه جا کنید . 

ولی مشکل اصلیتون همونطور که گفتم نذاشتن یک if هست

            DataTable dt=new DataTable();
            dt = db.SelectData("select * from tbl_Book");
            dataGridViewX1.DataSource = dt;
            //==================================================
            //==fill treeview
            DataTable dtNodeBookType = new DataTable();
            DataTable dtNodBookName = new DataTable();

            dtNodeBookType = db.SelectData("select * from tbl_BookType order by bookTypeDesc,bookTypeId");
            dtNodBookName = db.SelectData("select * from tbl_Book order by bookName,bookId");

            for (int i = 0; i < dtNodeBookType.Rows.Count; i++)
            {
                treeView1.Nodes.Add(dtNodeBookType.Rows[i].ItemArray[1].ToString());

                for (int j = 0; j < dtNodBookName.Rows.Count; j++)
                {
                    if (dtNodBookName.Rows[i].ItemArray[3].ToString() == dtNodeBookType.Rows[i].ItemArray[0].ToString())
                    {
                        treeView1.Nodes[i].Nodes.Add(dtNodBookName.Rows[j].ItemArray[1].ToString());
                    }
                }
            }

 

سلام و تشکر

من کد رو بصورت بالا تغییر دادم ولی باز اشکال داره

ستون BookTypeIdFK با اندیس 3 هست  و در جدول tbl_BookType ستون BookTypeId اولین ستون هست با اندیس 0

توسط (3,062 امتیاز) 1

اندیس شرط رو به اشتباه گذاشتید : dtNodBookName.Rows[j].ItemArray[3].ToString() . باید j باشه و نه i

توسط (6,145 امتیاز) 5 11 116
سوال جدید

2,337 سوال

2,871 پاسخ

3,725 دیدگاه

3,920 کاربر

دسته بندی ها

...