【问题标题】:Stop duplicate TreeView Nodes停止重复的 TreeView 节点
【发布时间】:2014-08-29 09:52:03
【问题描述】:

我有一个订单表 (orderTBL)。当用户创建订单时,它会在数据库中添加一个带有自定义订单号的新行。我从这个数据库加载我的树视图节点,但是,如果有不止一行具有相同的订单号,它会创建多个树视图节点。是否可以每个订单号仅显示一个树视图节点? TreeView 用于控制 DataRowFilter 仅显示在 DataGridView 中选择的订单号的订单 这是我使用的代码:

public void ordersForm_Load(object sender, EventArgs e)
    {
        // TODO: This line of code loads data into the 'lWADataBaseDataSet.orderTBL' table. You can move, or remove it, as needed.
      //  this.orderTBLTableAdapter.Fill(this.lWADataBaseDataSet.orderTBL);
        getOrders();
        getNumbers();
        string sOrder = null;
        int I = 0;
        for (I = 0; (I <= (orderTBL.Rows.Count - 1)); I++)
        {


            sOrder = orderTBL.Rows[1][1].ToString();
            treeView1.Nodes[0].Nodes.Add(sOrder);
        }



    }

private void getNumbers()
    {
        SqlCeConnection con = new SqlCeConnection(@"Data Source=|DataDirectory|\LWADataBase.sdf;");
        try

        {

            con.Open();
        }

        catch (SqlCeException ex)
        {
            MessageBox.Show(ex.Message);
            return;
        }
        treeView1.Nodes.Clear();
        SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM orderTBL ORDER BY[Order Number] ASC", con);

        try
        {

            SqlCeDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                TreeNode node = new TreeNode(dr["Order Number"].ToString());

                treeView1.Nodes.Add(node);

            }
        }

        catch (SqlCeException ex)
        {
            MessageBox.Show(ex.Message);
            return;

        }
        con.Close();

    }

【问题讨论】:

  • 这通常是一个非常严重的错误。不要隐藏它,修复它。

标签: c# treeview


【解决方案1】:

我假设具有相同顺序的不止一行 # 是您设计的一部分。如果不是,您应该在插入之前检查数据库。

作为设计的一部分,您只想为每个订单加载一个节点,您可以通过两种方式做到这一点。

通过查询过滤数据:

 SqlCeCommand cmd = new SqlCeCommand("SELECT distinct [Order Number] FROM orderTBL ORDER BY[Order Number] ASC", con);

'distinct' 告诉数据库确保返回集中的 now 行是重复的。

或者在加载期间维护一个临时列表,检查您是否已经加载了该订单。

    private void getNumbers()
    {
        SqlCeConnection con = new SqlCeConnection(@"Data Source=|DataDirectory|\LWADataBase.sdf;");
        try
        {

            con.Open();
        }

        catch (SqlCeException ex)
        {
            MessageBox.Show(ex.Message);
            return;
        }
        treeView1.Nodes.Clear();
        SqlCeCommand cmd = new SqlCeCommand("SELECT * FROM orderTBL ORDER BY[Order Number] ASC", con);

        try
        {
            //Temp List
            List<string> ordersLoaded = new List<string>();
            SqlCeDataReader dr = cmd.ExecuteReader();

            while (dr.Read())
            {
                string oderNum = dr["Order Number"].ToString();
                //Check if you loaded that order already
                if (!ordersLoaded.Contains(oderNum))
                {
                    //Add order to loaded list
                    ordersLoaded.Add(oderNum);
                    treeView1.Nodes.Add(new TreeNode(oderNum));
                }
            }
        }

        catch (SqlCeException ex)
        {
            MessageBox.Show(ex.Message);
            return;

        }
        con.Close();

    }

【讨论】:

  • SqlCeCommand cmd = new SqlCeCommand("SELECT distinct [Order Number] FROM orderTBL ORDER BY[Order Number] ASC", con);完美运行
猜你喜欢
  • 1970-01-01
  • 2010-11-04
  • 2012-01-19
  • 2013-11-05
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 2012-11-29
  • 2018-12-27
相关资源
最近更新 更多