C# 关于treeview中显示三层数据的问题!
我想要在treeview里显示客户名+合同号+ID号,这三层结构,两层显示是没问题了,但是就在第三层显示出错了,代码如下:stringConnectString="Dat...
我想要在treeview里显示 客户名 + 合同号+ID号,这三层结构,两层显示是没问题了,但是就在第三层显示出错了,代码如下:
string ConnectString = "Data Source=local;Initial Catalog=yifn;Integrated Security=True";//数据库连接字符串
SqlConnection cnn = new SqlConnection(ConnectString);
cnn.Open();
SqlCommand myCmd = new SqlCommand();
myCmd.CommandText = "select DISTINCT CustomerName from SaleContractDetail";
myCmd.Connection = cnn;
SqlDataReader myReader = myCmd.ExecuteReader();
while (myReader.Read())
{
TreeNode tt = new TreeNode();
tt.Text = myReader.GetString(0);
treeView1.Nodes.Add(tt.Text);
SqlConnection cn = new SqlConnection(ConnectString);
cn.Open();
SqlCommand mycmd = new SqlCommand();
mycmd.CommandText = "select DISTINCT SaleContractID from SaleContractDetail where CustomerName=@CustomerName";
mycmd.Connection = cn;
mycmd.Parameters.Add("@CustomerName", SqlDbType.Char, 15).Value = tt.Text;
SqlDataReader myDr = mycmd.ExecuteReader();
while (myDr.Read())
{
TreeNode ss = new TreeNode();
ss.Text = myDr.GetString(0);
int i = treeView1.Nodes.Count;
treeView1.Nodes[i - 1].Nodes.Add(ss.Text);
SqlConnection cn1 = new SqlConnection(ConnectString);
cn1.Open();
SqlCommand mycmd1 = new SqlCommand();
mycmd1.CommandText = "select DISTINCT SaleContractDetailID from SaleContractDetail where SaleContractID=@SaleContractID";
mycmd1.Connection = cn1;
mycmd1.Parameters.Add("@SaleContractID", SqlDbType.Char, 15).Value = ss.Text;
SqlDataReader myDr1 = mycmd1.ExecuteReader();
while (myDr1.Read())
{
TreeNode yy = new TreeNode();
yy.Text = myDr1.GetString(0);
int q = treeView1.Nodes.Count; ;
treeView1.Nodes[q - 1].Nodes.Add(yy.Text);
}
myDr1.Close();
}
myDr.Close();
}
测试的时候,问题就出在最后一层的数据加载上:
while (myDr1.Read())
{
TreeNode yy = new TreeNode();
yy.Text = myDr1.GetString(0);
int q = treeView1.Nodes.Count; ;
treeView1.Nodes[q - 1].Nodes.Add(yy.Text);
}
我不懂怎么去处理 int q = treeView1.Nodes.Count; ,如果用q-1的话,那么本来英国出现在第三层上的数据都会出现在第二层了。
如果把q换成i的话,会报错说是没意义。
我要怎样修改才能正常显示三层数据呢?
请大家帮帮忙,谢谢! 展开
string ConnectString = "Data Source=local;Initial Catalog=yifn;Integrated Security=True";//数据库连接字符串
SqlConnection cnn = new SqlConnection(ConnectString);
cnn.Open();
SqlCommand myCmd = new SqlCommand();
myCmd.CommandText = "select DISTINCT CustomerName from SaleContractDetail";
myCmd.Connection = cnn;
SqlDataReader myReader = myCmd.ExecuteReader();
while (myReader.Read())
{
TreeNode tt = new TreeNode();
tt.Text = myReader.GetString(0);
treeView1.Nodes.Add(tt.Text);
SqlConnection cn = new SqlConnection(ConnectString);
cn.Open();
SqlCommand mycmd = new SqlCommand();
mycmd.CommandText = "select DISTINCT SaleContractID from SaleContractDetail where CustomerName=@CustomerName";
mycmd.Connection = cn;
mycmd.Parameters.Add("@CustomerName", SqlDbType.Char, 15).Value = tt.Text;
SqlDataReader myDr = mycmd.ExecuteReader();
while (myDr.Read())
{
TreeNode ss = new TreeNode();
ss.Text = myDr.GetString(0);
int i = treeView1.Nodes.Count;
treeView1.Nodes[i - 1].Nodes.Add(ss.Text);
SqlConnection cn1 = new SqlConnection(ConnectString);
cn1.Open();
SqlCommand mycmd1 = new SqlCommand();
mycmd1.CommandText = "select DISTINCT SaleContractDetailID from SaleContractDetail where SaleContractID=@SaleContractID";
mycmd1.Connection = cn1;
mycmd1.Parameters.Add("@SaleContractID", SqlDbType.Char, 15).Value = ss.Text;
SqlDataReader myDr1 = mycmd1.ExecuteReader();
while (myDr1.Read())
{
TreeNode yy = new TreeNode();
yy.Text = myDr1.GetString(0);
int q = treeView1.Nodes.Count; ;
treeView1.Nodes[q - 1].Nodes.Add(yy.Text);
}
myDr1.Close();
}
myDr.Close();
}
测试的时候,问题就出在最后一层的数据加载上:
while (myDr1.Read())
{
TreeNode yy = new TreeNode();
yy.Text = myDr1.GetString(0);
int q = treeView1.Nodes.Count; ;
treeView1.Nodes[q - 1].Nodes.Add(yy.Text);
}
我不懂怎么去处理 int q = treeView1.Nodes.Count; ,如果用q-1的话,那么本来英国出现在第三层上的数据都会出现在第二层了。
如果把q换成i的话,会报错说是没意义。
我要怎样修改才能正常显示三层数据呢?
请大家帮帮忙,谢谢! 展开
1个回答
展开全部
我来解释一下
while (myDr1.Read())
{
TreeNode yy = new TreeNode();
yy.Text = myDr1.GetString(0);
int q = treeView1.Nodes.Count; ;
treeView1.Nodes[q - 1].Nodes.Add(yy.Text);
}
最后一句,treeView1.Nodes[q - 1].Nodes.Add(yy.Text);中,
treeView1 就是当前的树控件
treeView1.Nodes 就是树根下的所有节点,
那么treeView1.Nodes[q - 1]就是树根下的困让迟汪李第q个节点,也就是说是第q个客户名
那么treeView1.Nodes[q - 1].Nodes就是第q个客户的所有合同号,此时你把yy.Text加进去,不就是把id号加到合同号里边去了么?
所以treeView1.Nodes[q - 1].Nodes.Add(yy.Text);是不会将id号加到第三层的。
正确的应该是类似以下:
treeView1.Nodes[q - 1].Nodes[m - 1].Nodes.Add(yy.Text);
第滑薯一个Nodes是所有客户名,第二个Nodes是第q个客户的所有合同号,第三个Nodes是第q个客户第m个合同号的所有id号。
不知描述是否清楚?
while (myDr1.Read())
{
TreeNode yy = new TreeNode();
yy.Text = myDr1.GetString(0);
int q = treeView1.Nodes.Count; ;
treeView1.Nodes[q - 1].Nodes.Add(yy.Text);
}
最后一句,treeView1.Nodes[q - 1].Nodes.Add(yy.Text);中,
treeView1 就是当前的树控件
treeView1.Nodes 就是树根下的所有节点,
那么treeView1.Nodes[q - 1]就是树根下的困让迟汪李第q个节点,也就是说是第q个客户名
那么treeView1.Nodes[q - 1].Nodes就是第q个客户的所有合同号,此时你把yy.Text加进去,不就是把id号加到合同号里边去了么?
所以treeView1.Nodes[q - 1].Nodes.Add(yy.Text);是不会将id号加到第三层的。
正确的应该是类似以下:
treeView1.Nodes[q - 1].Nodes[m - 1].Nodes.Add(yy.Text);
第滑薯一个Nodes是所有客户名,第二个Nodes是第q个客户的所有合同号,第三个Nodes是第q个客户第m个合同号的所有id号。
不知描述是否清楚?
ZESTRON
2024-09-04 广告
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸...
点击进入详情页
本回答由ZESTRON提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询