C# 如何基于从树视图中选择的子节点从数据库加载datagridview?
如何基于从树视图中选择的子节点从数据库加载datagridview?例如,如果选择了制造商名称(制造商名称是子节点),则加载该制造商的所有产品C# 如何基于从树视图中选择的子节点从数据库加载datagridview?,c#,sql-server,datagridview,treeview,C#,Sql Server,Datagridview,Treeview,如何基于从树视图中选择的子节点从数据库加载datagridview?例如,如果选择了制造商名称(制造商名称是子节点),则加载该制造商的所有产品 String strConn = "Server = .\\SQLEXPRESS;Database = Northwind;Integrated Security = SSPI;"; SqlConnection conn = new SqlConnection(strConn); SqlDataAdapter da = new SqlDataAdapt
String strConn = "Server = .\\SQLEXPRESS;Database = Northwind;Integrated
Security = SSPI;";
SqlConnection conn = new SqlConnection(strConn);
SqlDataAdapter da = new SqlDataAdapter("Select * from Suppliers", conn);
SqlDataAdapter daCategories = new SqlDataAdapter("Select * from
Categories", conn);
da.Fill(ds, "Suppliers");
daCategories.Fill(ds, "Categories");
ds.Relations.Add("Cat_Supply",
ds.Tables["Categories"].Columns["CategoryID"],
ds.Tables["Suppliers"].Columns["CategoryID"]);
foreach(DataRow dr in ds.Tables["Categories"].Rows)
{
TreeNode tn = new TreeNode(dr["CategoryName"].ToString());
foreach (DataRow drChild in dr.GetChildRows("Cat_Supply"))
{
tn.Nodes.Add(drChild["CompanyNamde"].ToString());
}
treeView1.Nodes.Add(tn);
}
定义一个sperate sub来加载
DataGridView
,参数为e,即您拥有的category名称或CategoryID(更好的是,您可以将其作为标记存储在treeveiwiitem
)
C#:
VB.NET:
Private Sub LoadCategoryTest(CategoryID As Int32)
Dim cmdText As String = "SELECT ProductID, ProductName, CompanyName, Details, PurchasingCode FROM Products WHERE CategoryID = " & CategoryID & "; "
Dim ds As DataSet
Dim dt As DataTable
ds = DatabaseAccess.GetQueryResults(cmdText)
If ds.Tables.Count > 0 Then
dt = ds.Tables(0)
Me.dgBends.DataSource = dt
End If
End Sub
Private Sub TreeView1_NodeMouseClick(sender As Object, e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
Dim n As TreeNode = CType(sender, TreeNode)
Call LoadDetail(n.Tag) ' provided, you saved CategoryID into treenode tag
End Sub
显然,在SQL查询中输入您想要的内容。
注意:我没有解释所使用的数据库功能,我认为这超出了这个问题的范围。要使用it,只需使用树状视图事件,如NodeMouseClick
(或AfterSelect
等,具体取决于您的目标):
C#
VB.NET:
Private Sub LoadCategoryTest(CategoryID As Int32)
Dim cmdText As String = "SELECT ProductID, ProductName, CompanyName, Details, PurchasingCode FROM Products WHERE CategoryID = " & CategoryID & "; "
Dim ds As DataSet
Dim dt As DataTable
ds = DatabaseAccess.GetQueryResults(cmdText)
If ds.Tables.Count > 0 Then
dt = ds.Tables(0)
Me.dgBends.DataSource = dt
End If
End Sub
Private Sub TreeView1_NodeMouseClick(sender As Object, e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
Dim n As TreeNode = CType(sender, TreeNode)
Call LoadDetail(n.Tag) ' provided, you saved CategoryID into treenode tag
End Sub
您可以对CategoryName字符串执行相同的操作
注意:这个基本示例不包括参数化查询或绑定之类的内容。不过,它是功能性的