PDA

View Full Version : حرفه ای: Grid در Grid



Alireza.AM
سه شنبه 12 دی 1391, 01:15 صبح
پیش فرض:

در Database دو Table به مرتبط با مشخصات زیر وجود دارند:


“Categories” table
ID, CategoryName

“Products” table
ID, ProductName, CategoryID



بین این دو Table یک Relation بواسطه ID در “categories” و CategoryID در “Products” وجود دارد.

هدف:

نمایش همزمان Category ها و Product ها را در یک Gridview

http://www.gdriveurl.com/?idl=313569880258&out=1

روش:

در حقیقت در شکل فوق دو gridview وجود دارد، به این معنی که در template column در gridview اول، gridview دیگر گذاشته شده است.

پس از ایجاد دو gridview به ترتیبی که گفته شد کدهای زیر را برای پر کردن Gridview ها در Page_Load می نویسیم.

دقت کنید که در Select Command برای Data adapter برای دو Table دستور Select نوشته شده است:

#C:

System.Data.SqlClient.SqlDataAdapter da;
da = new System.Data.SqlClient.SqlDataAdapter("select * from categories;select * from products","Data Source=.;Initial Catalog=TrainingDB;Integrated Security=True");
System.Data.DataSet ds;
ds = new System.Data.DataSet();
da.Fill(ds);
ds.Tables[0].TableName = "Categories";
ds.Tables[1].TableName = "Products";
VB.NET:
Dim da As New SqlClient.SqlDataAdapter("select * from maincategories;select * from Products", SqlConnection1)
Dim ds As New DataSet
da.Fill(ds)
ds.Tables(0).TableName = "Categories"
ds.Tables(1).TableName = "Products"
ساختن Relation و اضافه کردن آن به Dataset:

#C:

System.Data.DataColumn ParentDC = ds.Tables["Categories"].Columns["id"];
System.Data.DataColumn ChildDC = ds.Tables["Products"].Columns["Categoryid"];
System.Data.DataRelation dr;
dr = new System.Data.DataRelation("Categories_Products", ParentDC, ChildDC);
ds.Relations.Add(dr);


VB.NET

Dim Parent As DataColumn = ds.Tables("Categories").Columns("ID")
Dim Child As DataColumn = ds.Tables("Products").Columns("CategoryID")

Dim CategoryRelation As DataRelation = New DataRelation("Categories_Products", Parent, Child, False)
ds.Relations.Add(Categories_Products)

پر کردن Gridview اول:

#C

GridView1.DataSource = ds.Tables["Categories"].DefaultView;
GridView1.DataBind();

VB.NET:

DataGrid1.DataSource = ds.Tables("Categories").DefaultView
DataGrid1.DataBind()

پر کردن Gridview دوم:

این کد باید برای Datasource مربوط به Gridview دوم نوشته شود و نه در Page_load، اگر نمی دانید که چگونه آنرا از طریق Property و Wizard وارد کنید، آن را در محیط HTMLبرای Gridview دوم و در DataSource property آن بنویسید.

کد برای VB.NET به این ترتیب است:

CType(Container.DataItem,DataRowView).CreateChildV iew("Categories_Products”)

حتما متوجه شده اید این کد برساس ID هر سط و Relation تعریف شده برای Gridview موجود در آن سطر، Datasource سازد.

کد برای #C:

((System.Data.DataRowView)Container.DataItem).Crea teChildView("Categories_Products")

همین کد در محیط (HTML(Design view:


<asp:GridView ID="GridView2" runat="server"

DataSource='<%# ((System.Data.DataRowView)Container.DataItem).Crea teChildView("Categories_Products") %>'
AutoGenerateColumns="False">