
建议你下载一个三方控件,用里面的TdxDBTreeList来直接 *** 作树形表。如果是自己用TreeView来创建的话,要用循环分多步 *** 作了。1、查出父结点数据2、循环写入父结点(可以将各结点序号放入SelectedIndex来做临时存储)3、循环当前已写入的父结点,并根据SeletedIndex(父结点序号)来查出属于当前序号的子结点,有数据的话 再循环写入子结点4、按上述方式循环判断下级子结点就可以创建一个树形结构表了。 对于添加,删除等 *** 作,也可以根据SeletedIndex结合Level来 *** 作。
乱的原因很简单,你看这个排序是
8 ba
2 er
9 jiu
6 liu
7 qi
3 san
4 si
5 wu
1 yi
明白了么?读出来的数据的确是按顺序来的,但是不是汉字数字意义的顺序,而是汉语拼音!!
你可以把汉字和数字对应起来,重新排序,然后再写到树里面
这是以前写的,可以参考一下!
treeView里面实现数据绑定
DataSet ds;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//以下是绑定数据
SqlConnection con = new
SqlConnection("server=;database=Test;uid=sa;pwd=sa");
SqlDataAdapter adapter = new SqlDataAdapter("select from TreeViewTest", con);
ds = new DataSet();
adapterFill(ds, "TreeViewTest");
//初始化TreeView :TreeView1Nodes:表示TreeView1的节点集合 ,"0"表示的是最顶上节点没有父节点
InitTree(TreeView1Nodes, "0");
}
}
/// <summary>
/// 初始化TreeView
/// </summary>
/// <param name="Nds">TreeNodeCollection:节点的集合</param>
/// <param name="parentId">parentId:某一节点的父节点ID</param>
private void InitTree(TreeNodeCollection Nds, string parentId)
{
DataView dv = new DataView();
TreeNode tmpNd;
//string intId;
dvTable = dsTables["TreeViewTest"];
//筛选出 ParentId父节点ID为传入值parentId的所有的数据行 为"0"时表时选出所有的顶节点数据行
dvRowFilter = "ParentId='" + parentId + "'";
//将筛选出的所有的数据行添加到节点
foreach (DataRowView drv in dv)
{
tmpNd = new TreeNode();
tmpNdValue = drv["NodeId"]ToString();
tmpNdText = drv["NodeName"]ToString();
NdsAdd(tmpNd);
//判断是不是存在drv["NodeId"]的ChildNodes,存在的话添加,不存在就继续遍历
DataView dvTemp = new DataView();
dvTempTable = dsTables["TreeViewTest"];
dvTempRowFilter = "ParentId='" + drv["NodeId"]ToString() + "'";
if (dvTempCount != 0)
{
InitTree(tmpNdChildNodes, tmpNdValue);
}
}
}
您好,procedure TForm1Button1Click(Sender: TObject);
var
sql,str,tbl:string;
NodeD,NodeT: TTreeNode;
begin
sql:='select name from mastersysdatabases order by name';
ADOQ1Close;
ADOQ1SQLClear;
ADOQ1SQLAdd(sql);
ADOQ1Open;
while not ADOQ1Eof do
begin
NodeD:=TreeviewItemsAdd(nil,ADOQ1FieldByName('name')AsString);
NodeT:=NodeD;
str:=ADOQ1FieldByName('name')AsString;
tbl:='';
sql:='select Aname TBL,Bname FLD from '+str+'sysobjects A,'+str+'syscolumns B where Aid=Bid AND Axtype=''U'' order by AName,BColorder';
ADOQ2Close;
ADOQ2SQLClear;
ADOQ2SQLAdd(sql);
ADOQ2Open;
while not ADOQ2Eof do
begin
if ADOQ2FieldByName('TBL')AsString=tbl then
begin
TreeViewItemsAddChild(NodeT,ADOQ2FieldByName('FLD')AsString);
end
else
begin
tbl:=ADOQ2FieldByName('TBL')AsString;
NodeT:=TreeViewItemsAddChild(NodeD,tbl);
TreeViewItemsAddChild(NodeT,ADOQ2FieldByName('FLD')AsString);
end;
ADOQ2Next;
end;
ADOQ1Next;
end;
end;
在form上放两个ADOQuery: ADOQ1,ADOQ2,链接好数据库,再放一个按钮,以上是个按钮事件,已经调试通过了,没有问题。
这是以前写的,可以参考一下!treeView里面实现数据绑定 DataSet ds; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { //以下是绑定数据 SqlConnection con = new SqlConnection("server=;database=Test;uid=sa;pwd=sa"); SqlDataAdapter adapter = new SqlDataAdapter("select from TreeViewTest", con); ds = new DataSet(); adapterFill(ds, "TreeViewTest"); //初始化TreeView :TreeView1Nodes:表示TreeView1的节点集合 ,"0"表示的是最顶上节点没有父节点 InitTree(TreeView1Nodes, "0"); } } /// /// 初始化TreeView /// /// TreeNodeCollection:节点的集合 /// parentId:某一节点的父节点ID private void InitTree(TreeNodeCollection Nds, string parentId) { DataView dv = new DataView(); TreeNode tmpNd; //string intId; dvTable = dsTables["TreeViewTest"]; //筛选出 ParentId父节点ID为传入值parentId的所有的数据行 为"0"时表时选出所有的顶节点数据行 dvRowFilter = "ParentId='" + parentId + "'"; //将筛选出的所有的数据行添加到节点 foreach (DataRowView drv in dv) { tmpNd = new TreeNode(); tmpNdValue = drv["NodeId"]ToString(); tmpNdText = drv["NodeName"]ToString(); NdsAdd(tmpNd); //判断是不是存在drv["NodeId"]的ChildNodes,存在的话添加,不存在就继续遍历 DataView dvTemp = new DataView(); dvTempTable = dsTables["TreeViewTest"]; dvTempRowFilter = "ParentId='" + drv["NodeId"]ToString() + "'"; if (dvTempCount != 0) { InitTree(tmpNdChildNodes, tmpNdValue); } } }
以上就是关于Delphi6中使用Treeview显示及修改数据库中树形结构表全部的内容,包括:Delphi6中使用Treeview显示及修改数据库中树形结构表、treeview连接数据库,显示出来的数据怎么是乱的呢、怎么用递归 绑定数据库 显示在treeview中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)