C# 停止重复的TreeView节点
我有一张订单桌。当用户创建订单时,它会使用自定义订单号将新行添加到数据库中。我从这个数据库加载我的treeview节点,但是,如果有多行具有相同的订单号,它将创建多个treeview节点。每个订单号是否可以只显示一个treeview节点?TreeView用于控制DataRowFilter,使其仅显示DataGridView中选择了订单号的订单。这是我使用的代码:C# 停止重复的TreeView节点,c#,treeview,C#,Treeview,我有一张订单桌。当用户创建订单时,它会使用自定义订单号将新行添加到数据库中。我从这个数据库加载我的treeview节点,但是,如果有多行具有相同的订单号,它将创建多个treeview节点。每个订单号是否可以只显示一个treeview节点?TreeView用于控制DataRowFilter,使其仅显示DataGridView中选择了订单号的订单。这是我使用的代码: public void ordersForm_Load(object sender, EventArgs e) {
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();
}
我假设拥有多个具有相同顺序的行是您设计的一部分。如果没有,则应在插入之前检查数据库 作为设计的一部分,您只需要为每个订单加载一个节点,您可以通过两种方式来实现 通过查询筛选数据:
SqlCeCommand cmd = new SqlCeCommand("SELECT distinct [Order Number] FROM orderTBL ORDER BY[Order Number] ASC", con);
“distinct”告诉数据库确保返回集中的行现在是重复的
或者在加载期间维护一个临时列表,检查您是否已加载该订单
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通过[Order Number]ASC,con从orderTBL订单中选择不同的[Order Number];完美地工作