Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何基于从树视图中选择的子节点从数据库加载datagridview?_C#_Sql Server_Datagridview_Treeview - Fatal编程技术网

C# 如何基于从树视图中选择的子节点从数据库加载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

如何基于从树视图中选择的子节点从数据库加载datagridview?例如,如果选择了制造商名称(制造商名称是子节点),则加载该制造商的所有产品

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字符串执行相同的操作

注意:这个基本示例不包括参数化查询或绑定之类的内容。不过,它是功能性的