【问题标题】:How do I load a datagridview from a database based on the child node selected from a treeview?如何根据从树视图中选择的子节点从数据库中加载数据网格视图?
【发布时间】:2019-09-08 20:39:37
【问题描述】:

如何根据从树视图中选择的子节点从数据库中加载数据网格视图?前任。如果选择制造商名称(制造商名称是子节点),则加载该制造商的所有产品

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);
}

【问题讨论】:

    标签: c# sql-server datagridview treeview


    【解决方案1】:

    定义一个单独的子来加载DataGridView,参数可以是你拥有的类别名称,也可以是CategoryID(更好,你可以将它作为标签存储在TreeVeiwItem中,我相信)。

    C#:

    private void LoadCategoryTest(Int32 CategoryID)
    {
        string cmdText = "SELECT ProductID, ProductName, CompanyName, Details, PurchasingCode FROM Products WHERE CategoryID = " + CategoryID + "; ";
        DataSet ds;
        DataTable dt;
        ds = DatabaseAccess.GetQueryResults(cmdText);
        if (ds.Tables.Count > 0)
        {
            dt = ds.Tables(0);
            this.dgBends.DataSource = dt;
        }
    }
    

    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
    

    显然,将您想要获取的任何内容放入 SQL 查询中。 注意:我不解释使用的数据库功能,我相信这超出了这个问题的范围。要使用它,只需使用树视图事件,如 NodeMouseClick(或 AfterSelect 等,具体取决于您的目标):

    C#

    private void TreeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        TreeNode n = (TreeNode)sender;
        LoadDetail(n.Tag);  // provided, you saved CategoryID into treenode tag
    }       
    

    VB.NET:

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

    注意:这个基本示例不包括参数查询或绑定等内容。不过,它很实用。

    【讨论】:

      猜你喜欢
      • 2012-06-27
      • 2016-08-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      相关资源
      最近更新 更多