مقدمه
در اینجا نحوه نمایش سطرهای قابل گسترش/ جمع شدن در یک دیتاگرید در سی شارپ را شرح خواهم داد.
این برای مواردی که ما نیاز به نمایش محتوای/ردیف اصلی و فرزند داریم کاربرد دارد.
مثال جدول دانشجویی
در این مثال ما لیستی از دانش آموزان داریم و در داخل آن جزئیاتی از نشانه های دانش آموز به شرح زیر داریم:
نمای جزئیات
هدف ما نمایش این نوع داده ها با استفاده از فرم های C# ویندوز است.
خروجی مورد انتظار در فرم های ویندوز این خواهد بود:
رویه با کد
- ابتدا باید جداول Master و child ایجاد کنیم.
- برای شناسایی رابطه بین جداول باید کلیدهای اولیه و خارجی در جداول داشته باشیم.
- در اینجا ما در حال ایجاد یک جدول داده برای جداول اصلی و فرزند هستیم.
- میز استاد (دانشجو).
- //Parent table
- DataTable dtstudent = new DataTable();
- dtstudent.Columns.Add("Student_ID", typeof(int));
- dtstudent.Columns.Add("Student_Name", typeof(string));
- dtstudent.Columns.Add("Student_RollNo", typeof(string));
- جدول کودک (نمرات دانش آموز).
- //Child table
- DataTable dtstudentMarks = new DataTable();
- dtstudentMarks.Columns.Add("Student_ID", typeof(int));
- dtstudentMarks.Columns.Add("Subject_ID", typeof(int));
- dtstudentMarks.Columns.Add("Subject_Name", typeof(string));
- dtstudentMarks.Columns.Add("Marks", typeof(int));
- درک رابطه بین جدول استاد و فرزند.
- به طور خلاصه:
- dtstudent.StudentID = dtstudentMarks.StudentID
- افزودن ردیف به جدول اصلی (جدول دانشجو):
- //Adding Rows
- dtstudent.Rows.Add(111, "Devesh", "03021013014");
- dtstudent.Rows.Add(222, "ROLI", "0302101444");
- dtstudent.Rows.Add(333, "ROLI Ji", "030212222");
- dtstudent.Rows.Add(444, "NIKHIL", "KANPUR");
- افزودن ردیف به جدول فرزند (جدول نشانه های دانش آموز):
- // data for devesh ID=111
- dtstudentMarks.Rows.Add(111, "01","Physics", 99);
- dtstudentMarks.Rows.Add(111, "02","Maths", 77);
- dtstudentMarks.Rows.Add(111, "03","C#", 100);
- dtstudentMarks.Rows.Add(111, "01","Physics", 99);
- //data for ROLI ID=222
- dtstudentMarks.Rows.Add(222, "01", "Physics", 80);
- dtstudentMarks.Rows.Add(222, "02", "English", 95);
- dtstudentMarks.Rows.Add(222, "03", "Commerce", 95);
- dtstudentMarks.Rows.Add(222, "01", "BankPO", 99);
- افزودن جدول اصلی و فرزند به مجموعه داده:
- DataSet dsDataset = new DataSet();
- dsDataset.Tables.Add(dtstudent);
- dsDataset.Tables.Add(dtstudentMarks);
- k. Defining relationship between Master and child table
- DataRelation Datatablerelation = new DataRelation("DetailsMarks", dsDataset.Tables[0].Columns[0], dsDataset.Tables[1].Columns[0], true);
- dsDataset.Relations.Add(Datatablerelation);
- افزودن یک کنترل Datagrid در فرم Windows Forms.
مطابق با صفحه زیر، میتوانیم با کلیک راست روی نوار ابزار و انتخاب مورد، یک دیتاگرید به فرم Windows Forms اضافه کنیم.
- اتصال داده ها:
- dataGrid1.DataSource = dsDataset.Tables[0];
- همه کدها با هم:
- private void Form1_Load(object sender, EventArgs e)
- {
- //Parent table
- DataTable dtstudent = new DataTable();
- // add column to datatable
- dtstudent.Columns.Add("Student_ID", typeof(int));
- dtstudent.Columns.Add("Student_Name", typeof(string));
- dtstudent.Columns.Add("Student_RollNo", typeof(string));
- //Child table
- DataTable dtstudentMarks = new DataTable();
- dtstudentMarks.Columns.Add("Student_ID", typeof(int));
- dtstudentMarks.Columns.Add("Subject_ID", typeof(int));
- dtstudentMarks.Columns.Add("Subject_Name", typeof(string));
- dtstudentMarks.Columns.Add("Marks", typeof(int));
- //Adding Rows
- dtstudent.Rows.Add(111, "Devesh", "03021013014");
- dtstudent.Rows.Add(222, "ROLI", "0302101444");
- dtstudent.Rows.Add(333, "ROLI Ji", "030212222");
- dtstudent.Rows.Add(444, "NIKHIL", "KANPUR");
- // data for devesh ID=111
- dtstudentMarks.Rows.Add(111, "01","Physics", 99);
- dtstudentMarks.Rows.Add(111, "02","Maths", 77);
- dtstudentMarks.Rows.Add(111, "03","C#", 100);
- dtstudentMarks.Rows.Add(111, "01","Physics", 99);
- //data for ROLI ID=222
- dtstudentMarks.Rows.Add(222, "01", "Physics", 80);
- dtstudentMarks.Rows.Add(222, "02", "English", 95);
- dtstudentMarks.Rows.Add(222, "03", "Commerce", 95);
- dtstudentMarks.Rows.Add(222, "01", "BankPO", 99);
- DataSet dsDataset = new DataSet();
- //Add two DataTables in Dataset
- dsDataset.Tables.Add(dtstudent);
- dsDataset.Tables.Add(dtstudentMarks);
- DataRelation Datatablerelation = new DataRelation("DetailsMarks", dsDataset.Tables[0].Columns[0], dsDataset.Tables[1].Columns[0], true);
- dsDataset.Relations.Add(Datatablerelation);
- dataGrid1.DataSource = dsDataset.Tables[0];
- }
- اجرای کد:
صفحه زیر را با سطرهای قابل گسترش در دیتاگرید دریافت خواهیم کرد.
- برای دیدن جزئیات، یک ردیف را بزرگ کنید.
- برای دریافت جزئیات Marks روی DetailsMarks کلیک کنید.