3个datagridview和3个表 [英] 3 datagridview and 3 tables
问题描述
我创建了一个具有3个datagridview的窗口sform,在ms访问中thewr是3个表,彼此之间具有关系,例如<>
客户之间存在第一关系->订单和
第二关系在第二个顺序之间存在-> orderdetail
当我在第二个datagridview上单击与第一个datagridview相关的数据时,第一个datagridview充满了客户表记录
我已经完成了这个阶段
但是,当我单击第二个datagrid视图时,第三个datagrid视图中没有显示正确的记录
i have created a window sform having 3 datagridview and thewr is 3 table in ms access having relationship with each other for ex
1st relation exist between customer -> order, and
2nd relation exist betwwen order -> orderdetail
1st datagridview is filled with customer table record when i click on 1 st datagridview related data fill on second datagridview
i have done uptill this stage
but when i click on second datagrid view , proper record are not displayed in third datagrid view
Dim par As DataColumn
Dim child As DataColumn
par = ds.Tables("product").Columns("CustomerID")
child = ds.Tables("order").Columns("CustomerID")
datarel = New DataRelation("customersorder", par, child)
ds.Relations.Add(datarel)
DataGridView2.DataSource = ds.Tables("product")
DataGridView2.DataMember = "customersorder"
Dim datare2 As DataRelation
Dim par1 As DataColumn
Dim child1 As DataColumn
par1 = ds.Tables("order").Columns("OrderID")
child1 = ds.Tables("orderdetail").Columns("OrderID")
datare2 = New DataRelation("detail", par1, child1)
ds.Relations.Add(datare2)
DataGridView3.DataSource = ds.Tables("order")
DataGridView3.DataMember = "detail"
推荐答案
<asp:DataGrid ID="Grd1" DataKeyField="MenuId" OnItemDataBound="Grd1_DataBound" AutoGenerateColumns="false"
runat="server">
<Columns>
<asp:TemplateColumn HeaderText="MenuName">
<ItemTemplate>
<asp:Label ID="LblSrlNo" Text='<%#Container.DataItem("MenuId") %>' runat="server"></asp:Label>
<asp:Label ID="LblSubMenuName" Text='<%#Container.DataItem("MenuName") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="SubMenuDetails">
<ItemTemplate>
<asp:DataGrid ID="Grd2" OnItemDataBound="Grd2_DataBound" AutoGenerateColumns="false" runat="server">
<Columns>
<asp:TemplateColumn HeaderText="SubMenu">
<ItemTemplate>
<asp:Label ID="LblSrlNo2" Text='<%#Container.DataItem("SubMenuId") %>' runat="server"></asp:Label>
<asp:Label ID="LblSubMenuName" Text='<%#Container.DataItem("SubMenuName") %>' runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="SubSubMenu">
<ItemTemplate>
<asp:DataGrid ID="Grd3" ShowHeader="false" AutoGenerateColumns="false" runat="server">
<Columns>
<asp:TemplateColumn HeaderText="Menu Name">
<ItemTemplate>
<asp:Label ID="LblSrlNo3" Text='<%#Container.DataItem("SubSubMenuId") %>' runat="server"></asp:Label>
<asp:Label ID="LblSubSubMenuName" Text='<%#Container.DataItem("SubSubMenuName") %>'
runat="server"></asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
BindGrid()
End Sub
Protected Sub BindGrid()
Dim SqlCon1 As New SqlConnection("Data Source=PC-BTTPL-20;Initial Catalog=NTBluePrint;User ID=sa;Password=admin123")
Dim SqlCom1 As New SqlCommand("SELECT * FROM MenuMaster", SqlCon1)
If SqlCon1.State <> ConnectionState.Open Then
SqlCon1.Open()
End If
Grd1.DataSource = SqlCom1.ExecuteReader()
Grd1.DataBind()
SqlCon1.Close()
End Sub
Protected Sub Grd1_DataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles Grd1.ItemDataBound
If e.Item.ItemType = ListItemType.Item OrElse e.Item.ItemType = ListItemType.AlternatingItem Then
Dim SqlCon2 As New SqlConnection("Data Source=PC-BTTPL-20;Initial Catalog=NTBluePrint;User ID=sa;Password=admin123")
Dim SqlCom2 As SqlCommand
Dim MenuID As Integer = Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "MenuID"))
Dim dgChildren As DataGrid = DirectCast(e.Item.FindControl("Grd2"), DataGrid)
SqlCom2 = New SqlCommand("SELECT * FROM SubMenuMaster WHERE MenuId = " & MenuID, SqlCon2)
If SqlCon2.State <> ConnectionState.Open Then
SqlCon2.Open()
End If
dgChildren.DataSource = SqlCom2.ExecuteReader()
dgChildren.DataBind()
SqlCon2.Close()
End If
End Sub
Protected Sub Grd2_DataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs)
If e.Item.ItemIndex >= 0 Then
Dim SqlCon22 As New SqlConnection("Data Source=PC-BTTPL-20;Initial Catalog=NTBluePrint;User ID=sa;Password=admin123")
Dim SqlCom22 As SqlCommand
Dim SubMenuId As Integer = Convert.ToInt32(DataBinder.Eval(e.Item.DataItem, "SubMenuId"))
Dim dgChildren As DataGrid = DirectCast(e.Item.FindControl("Grd3"), DataGrid)
SqlCom22 = New SqlCommand("SELECT * FROM SubSubMenuMaster WHERE SubMenuId = " & SubMenuId, SqlCon22)
If SqlCon22.State <> ConnectionState.Open Then
SqlCon22.Open()
End If
dgChildren.DataSource = SqlCom22.ExecuteReader()
dgChildren.DataBind()
SqlCon22.Close()
End If
End Sub
这篇关于3个datagridview和3个表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!