1。双击TreeView中的一个记录后,怎么样把这个记录ID添加到TEXT框中的光标停留位置的后面?2。有3个数据库表:
表一字段:ID1 Name1 (其中ID1为2位数字,如“01”)
表二字段:ID2 Name2 ID1 (其中ID2为4位数字,如“0101”)
表三字段:ID3 Name3 ID1 ID2 (其中ID3为6位数字,如“010101”)怎么样用TreeView显示成3级?
表一字段:ID1 Name1 (其中ID1为2位数字,如“01”)
表二字段:ID2 Name2 ID1 (其中ID2为4位数字,如“0101”)
表三字段:ID3 Name3 ID1 ID2 (其中ID3为6位数字,如“010101”)怎么样用TreeView显示成3级?
在树的双击事件中
int i=this.textBox1.SelectionStart;
this.textBox1.Text=this.textBox1.Text.Insert(i,tree.SelectNode.Text);
this.ActiveControl.Name.ToString();
#region 获取TreeViewBasic_Show
private void TreeViewBasic_Show(string basictypecode)
{
treeviewBasic.Nodes.Clear();
DataSet dsbasic1=Basic1Manager.GetDataSet();
DataSet dsbasic2=Basic2Manager.GetDataSet();
DataSet dsbasic3=Basic3Manager.GetDataSet(); DataTable dtbasic1=new DataTable();
dtbasic1=dsbasic1.Tables[0];
DataTable dtbasic2=new DataTable();
dtbasic2=dsbasic2.Tables[0];
DataTable dtbasic3=new DataTable();
dtbasic3=dsbasic3.Tables[0];
// 开始加入第一级节点,ID为2位
// 目前节点有限制,就是子节点的ID不能超过两位
foreach (DataRow dr in dtbasic1.Rows)
{
string id = dr["BasicTypeCode"].ToString(); if (id.Length == 2)
{
TreeNode node = new TreeNode(dr["BasicTypeName"].ToString());
node.Tag = id;
treeviewBasic.Nodes.Add(node); AddChildBasic(dtbasic2,id,node.Nodes);
}
}
}
void AddChildBasic(DataTable dt, string pid, TreeNodeCollection nodes)
{
foreach (DataRow dr in dt.Rows)
{
string id = dr["BasicNameCode"].ToString(); //跳到子节点
if ((id.Length == pid.Length+2) && id.StartsWith(pid))
{
TreeNode node = new TreeNode(dr["BasicNameName"].ToString());
node.Tag = id;
nodes.Add(node);
// treeviewBasic.SelectedImageIndex=1; AddChildBasic(dt,id,node.Nodes);
}
}
}
#endregion
现在的情况是dtbasic3不能显示了。
好像只能用:
for(int i=0;dtbasic1.count;i++)
{
for(int i=0;dtbasic1.count;i++)
{
for(int i=0;dtbasic1.count;i++)
{}
}}
大家能帮我写出来吗?
比如现在有2个TEXT框,事先把光标放在TEXT1,然后双击TreeView中的记录后,会往TEXT1中光标位置后添加该记录。
但是现在是在treeviewBasic_DoubleClick事件中,怎么判断双击之前的光标是在哪个TEXT框呢?
欢迎大家在此讨论关于.net的各种技术。1号群
表二字段:ID2 Name2 ID1 (其中ID2为4位数字,如“0101”)
表三字段:ID3 Name3 ID1 ID2 (其中ID3为6位数字,如“010101”)表二和表三都有父结点啊。
Private string strControeName;
在每个控件的leave事件中写上
this.strControlName=当前控件的名字
树在双击的时候可以去这里取了
你的这个土办法还是可以的。谢谢了。就只剩下第二个问题没解决了。2。
#region 获取TreeViewBasic_Show
private void TreeViewBasic_Show(string basictypecode)
{
treeviewBasic.Nodes.Clear();
DataSet dsbasic1=Basic1Manager.GetDataSet();
DataSet dsbasic2=Basic2Manager.GetDataSet();
DataSet dsbasic3=Basic3Manager.GetDataSet(); DataTable dtbasic1=new DataTable();
dtbasic1=dsbasic1.Tables[0];
DataTable dtbasic2=new DataTable();
dtbasic2=dsbasic2.Tables[0];
DataTable dtbasic3=new DataTable();
dtbasic3=dsbasic3.Tables[0];
// 开始加入第一级节点,ID为2位
// 目前节点有限制,就是子节点的ID不能超过两位
foreach (DataRow dr in dtbasic1.Rows)
{
string id = dr["BasicTypeCode"].ToString(); if (id.Length == 2)
{
TreeNode node = new TreeNode(dr["BasicTypeName"].ToString());
node.Tag = id;
treeviewBasic.Nodes.Add(node); AddChildBasic(dtbasic2,id,node.Nodes);
}
}
}
void AddChildBasic(DataTable dt, string pid, TreeNodeCollection nodes)
{
foreach (DataRow dr in dt.Rows)
{
string id = dr["BasicNameCode"].ToString(); //跳到子节点
if ((id.Length == pid.Length+2) && id.StartsWith(pid))
{
TreeNode node = new TreeNode(dr["BasicNameName"].ToString());
node.Tag = id;
nodes.Add(node);
// treeviewBasic.SelectedImageIndex=1; AddChildBasic(dt,id,node.Nodes);
}
}
}
#endregion
现在的情况是dtbasic3不能显示了。
好像只能用:
for(int i=0;dtbasic1.count;i++)
{
for(int i=0;dtbasic1.count;i++)
{
for(int i=0;dtbasic1.count;i++)
{}
}}
大家能帮我写出来吗?
只写了段伪代码
可能对你有帮助
DataTable dt1=一层表;
DataTable dt2=二层表;
DataTable dt3=三层表;
System.Data.DataRelation dr1=new DataRelation("first",dt1,dt2,new string[]{"id1"},new string[] {"id1"});
System.Data.DataRelation dr2=new DataRelation("second",dt2,dt3,new string[] {"id2"},new string[] {"id3"});
foreach (DataRow dr in dt1)
{
TreeNode tn=new TreeNode(dr["id1"].ToString().Trim());
this.treeView1.Nodes.Add(tn);
foreach(DataRow drr in dr.GetChildRows(dr1))
{
TreeNode tnn=new TreeNode(drr["id2"].ToString().Trim());
tn.Nodes.Add(tnn);
foreach(DataRow drrr in drr.GetChildRows(dr2))
{
TreeNode tnnn=new TreeNode(drrr["id3"].ToString().Trim());
tnn.Nodes.Add(tnnn);
} }
}
yuxing117(雨行) :
你的这个方法已经试了(我想了个土法子Private string strControeName;在每个控件的leave事件中写上this.strControlName=当前控件的名字树在双击的时候可以去这里取了),
可行。上面这个方法还没试,不管怎么样,还是谢谢你。
结贴吧。