提供代码如下
public static DataTable GetCategoryTree(WebInfoBase info)
{
DataTable dt = info.List(_DefaultDB, "", "[ID],[Title],[ParentID],[ChildNum],[Depth],[OrderNo]", "&version=", "[ID] ASC");
dt.Columns.Add("Path", typeof(string));
//下面的怎么写
}
显示后的结果为:
1 ⊙分类名称 0
2 ├减速机 1
42│ ├四大系列 9
43│ ├行星系列 10
44│ ├T系列 11
49│ ├摆线系列 16
50│ ├三合一系列 17
51│ └其他 18
14├搅拌设备 5
15└起重机及配件
23 个解决方案
#1
自己顶下
#2
找了半天没找到
反正主要思想就是根据关系位置(父结点,子结点,叶子结点)来拼字符串绘图。
这些结点的判断就是递归判断各个结点在层次树中的地位,然后通过符号、空格,字符串,结点名称来拼,最后还要注意排序绘制问题。
比如平常叶子结点和最后一个结点的区别:
44│ ├T系列 11
51│ └其他 18
偶再找找去,呵呵。
反正主要思想就是根据关系位置(父结点,子结点,叶子结点)来拼字符串绘图。
这些结点的判断就是递归判断各个结点在层次树中的地位,然后通过符号、空格,字符串,结点名称来拼,最后还要注意排序绘制问题。
比如平常叶子结点和最后一个结点的区别:
44│ ├T系列 11
51│ └其他 18
偶再找找去,呵呵。
#3
怎么没有人啊?
#4
//------------------------------------------------
/// <summary>
/// 初始化TREEVIEW
/// </summary>
/// <param name="tv"></param>
public void InitTreeView( TreeView tv)
{
string strSql= "select * from table1 where ParentID is null";
DataView dataview = GetTreeDataView(strSql);
foreach (DataRowView AddDataView in dataview)
{
TreeNode node = new TreeNode();
node.Text = AddDataView["Title"].ToString()+ " " + AddChilDataView["ChildNum"].ToString();
node.Value = AddDataView["id"].ToString();
tv.Nodes.Add(node);
AddChildNodes(node);
}
}
public DataView GetTreeDataView(string SQLString)
{
DataSet ds = DbManagerSQL.Query(SQLString);
return ds.Tables[0].DefaultView;
}
/// <summary>
/// 添加子项
/// </summary>
/// <param name="ChildNode"></param>
public void AddChildNodes(TreeNode ChildNode)
{
string ParentID = Convert.ToString(ChildNode.Value);
DataView dataview = GetTreeDataView("select * from table1 where ParentID = '" + ParentID + "'");
foreach (DataRowView AddChilDataView in dataview)
{
TreeNode Node = new TreeNode();
Node.Text = AddChilDataView["Title"].ToString() + " " + AddChilDataView["ChildNum"].ToString();
Node.Value = AddChilDataView["id"].ToString();
ChildNode.ChildNodes.Add(Node);
AddChildNodes(Node);
}
}
///------------------------------------------------
看看这个吧,我前几天就是这样做的。
#5
我先看下
但是不知道你是否看清楚了
我的需求
但是不知道你是否看清楚了
我的需求
#6
我不要TreeView
要用DataTable显示
要用DataTable显示
#7
我前段时间也是须要用DataTable显示,后来没做出来,就用TreeView
将就着用了
将就着用了
#8
我的数据显示之后可是要能够修改和删除的
#9
帮顶
#10
帮顶
#11
江湖救急
#12
我相信高手还是有的
#13
继续等待.........
#14
#15
继续等待
#16
#17
不懂,帮顶
#18
不懂,帮顶
#19
我也有这方面需求,看看有什么好的代码吗?
#20
原来好多人的带着星星却不会将DataTable中的数据加载到树中。。。。。汗
#21
static DataColumn column = new DataColumn();
static DataTable table = new DataTable();
static DataRow MyRow;
ublic static DataTable GetCategoryTree(WebInfoBase info)
{
DataTable dt = info.List(_DefaultDB, "", "[ID],[Title],[ParentID],[ChildNum],[Depth],[OrderNo]", "&version=", "[ID] ASC");
if (table.Rows.Count > 0)
{
table.Columns.Clear();
table.Rows.Clear();
}
CreateDataTable();
GetTree(dt, "0", 0);
return table;
}
public static void GetTree(DataTable dt, string pid, int blank)
{
string str = " ";
DataView dv = new DataView(dt);
dv.RowFilter = "ParentID = " + pid;
if (blank > 0)
{
string s = "";
if (blank == 1)
{
str = "├";
}
for (int i = 2; i <= blank; i++)
{
s = s + " | "+" "+" - ";
}
str = s + "├";
}
foreach (DataRowView drv in dv)
{
string id = drv["ID"].ToString();
string Title = drv["Title"].ToString();
string OrderNo = drv["OrderNo"].ToString();
string ParentID = drv["ParentID"].ToString();
string Depth = drv["Depth"].ToString();
string ChildNum = drv["ChildNum"].ToString();
MyRow = table.NewRow();
MyRow["ID"] = int.Parse(id);
MyRow["Title"] = str + Title;
MyRow["OrderNo"] = int.Parse(OrderNo);
MyRow["ParentID"] = int.Parse(ParentID);
MyRow["Depth"] = int.Parse(Depth);
MyRow["ChildNum"] = int.Parse(ChildNum);
table.Rows.Add(MyRow);
int n = int.Parse(Depth);
//if (n <= 1)
//{
n++;
//}
GetTree(dt, id, n);
}
}
public static void CreateDataTable()
{
table.Columns.Clear();
column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "ID";
table.Columns.Add(column);
column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "ParentID";
table.Columns.Add(column);
column = new DataColumn();
column.DataType = Type.GetType("System.String");
column.ColumnName = "Title";
table.Columns.Add(column);
column = new DataColumn();
column.DataType = Type.GetType("System.Int32");
column.ColumnName = "ChildNum";
table.Columns.Add(column);
column = new DataColumn();
column.DataType = Type.GetType("System.Int32");
column.ColumnName = "Depth";
table.Columns.Add(column);
column = new DataColumn();
column.DataType = Type.GetType("System.Int32");
column.ColumnName = "OrderNo";
table.Columns.Add(column);
//table.Columns.Clear();
}
#22
lz有意思,datatable和dataview有什么区别,代码改下不就可以用了么?
#23
楼上的递归算法有问题哦
#1
自己顶下
#2
找了半天没找到
反正主要思想就是根据关系位置(父结点,子结点,叶子结点)来拼字符串绘图。
这些结点的判断就是递归判断各个结点在层次树中的地位,然后通过符号、空格,字符串,结点名称来拼,最后还要注意排序绘制问题。
比如平常叶子结点和最后一个结点的区别:
44│ ├T系列 11
51│ └其他 18
偶再找找去,呵呵。
反正主要思想就是根据关系位置(父结点,子结点,叶子结点)来拼字符串绘图。
这些结点的判断就是递归判断各个结点在层次树中的地位,然后通过符号、空格,字符串,结点名称来拼,最后还要注意排序绘制问题。
比如平常叶子结点和最后一个结点的区别:
44│ ├T系列 11
51│ └其他 18
偶再找找去,呵呵。
#3
怎么没有人啊?
#4
//------------------------------------------------
/// <summary>
/// 初始化TREEVIEW
/// </summary>
/// <param name="tv"></param>
public void InitTreeView( TreeView tv)
{
string strSql= "select * from table1 where ParentID is null";
DataView dataview = GetTreeDataView(strSql);
foreach (DataRowView AddDataView in dataview)
{
TreeNode node = new TreeNode();
node.Text = AddDataView["Title"].ToString()+ " " + AddChilDataView["ChildNum"].ToString();
node.Value = AddDataView["id"].ToString();
tv.Nodes.Add(node);
AddChildNodes(node);
}
}
public DataView GetTreeDataView(string SQLString)
{
DataSet ds = DbManagerSQL.Query(SQLString);
return ds.Tables[0].DefaultView;
}
/// <summary>
/// 添加子项
/// </summary>
/// <param name="ChildNode"></param>
public void AddChildNodes(TreeNode ChildNode)
{
string ParentID = Convert.ToString(ChildNode.Value);
DataView dataview = GetTreeDataView("select * from table1 where ParentID = '" + ParentID + "'");
foreach (DataRowView AddChilDataView in dataview)
{
TreeNode Node = new TreeNode();
Node.Text = AddChilDataView["Title"].ToString() + " " + AddChilDataView["ChildNum"].ToString();
Node.Value = AddChilDataView["id"].ToString();
ChildNode.ChildNodes.Add(Node);
AddChildNodes(Node);
}
}
///------------------------------------------------
看看这个吧,我前几天就是这样做的。
#5
我先看下
但是不知道你是否看清楚了
我的需求
但是不知道你是否看清楚了
我的需求
#6
我不要TreeView
要用DataTable显示
要用DataTable显示
#7
我前段时间也是须要用DataTable显示,后来没做出来,就用TreeView
将就着用了
将就着用了
#8
我的数据显示之后可是要能够修改和删除的
#9
帮顶
#10
帮顶
#11
江湖救急
#12
我相信高手还是有的
#13
继续等待.........
#14
#15
继续等待
#16
#17
不懂,帮顶
#18
不懂,帮顶
#19
我也有这方面需求,看看有什么好的代码吗?
#20
原来好多人的带着星星却不会将DataTable中的数据加载到树中。。。。。汗
#21
static DataColumn column = new DataColumn();
static DataTable table = new DataTable();
static DataRow MyRow;
ublic static DataTable GetCategoryTree(WebInfoBase info)
{
DataTable dt = info.List(_DefaultDB, "", "[ID],[Title],[ParentID],[ChildNum],[Depth],[OrderNo]", "&version=", "[ID] ASC");
if (table.Rows.Count > 0)
{
table.Columns.Clear();
table.Rows.Clear();
}
CreateDataTable();
GetTree(dt, "0", 0);
return table;
}
public static void GetTree(DataTable dt, string pid, int blank)
{
string str = " ";
DataView dv = new DataView(dt);
dv.RowFilter = "ParentID = " + pid;
if (blank > 0)
{
string s = "";
if (blank == 1)
{
str = "├";
}
for (int i = 2; i <= blank; i++)
{
s = s + " | "+" "+" - ";
}
str = s + "├";
}
foreach (DataRowView drv in dv)
{
string id = drv["ID"].ToString();
string Title = drv["Title"].ToString();
string OrderNo = drv["OrderNo"].ToString();
string ParentID = drv["ParentID"].ToString();
string Depth = drv["Depth"].ToString();
string ChildNum = drv["ChildNum"].ToString();
MyRow = table.NewRow();
MyRow["ID"] = int.Parse(id);
MyRow["Title"] = str + Title;
MyRow["OrderNo"] = int.Parse(OrderNo);
MyRow["ParentID"] = int.Parse(ParentID);
MyRow["Depth"] = int.Parse(Depth);
MyRow["ChildNum"] = int.Parse(ChildNum);
table.Rows.Add(MyRow);
int n = int.Parse(Depth);
//if (n <= 1)
//{
n++;
//}
GetTree(dt, id, n);
}
}
public static void CreateDataTable()
{
table.Columns.Clear();
column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "ID";
table.Columns.Add(column);
column = new DataColumn();
column.DataType = System.Type.GetType("System.Int32");
column.ColumnName = "ParentID";
table.Columns.Add(column);
column = new DataColumn();
column.DataType = Type.GetType("System.String");
column.ColumnName = "Title";
table.Columns.Add(column);
column = new DataColumn();
column.DataType = Type.GetType("System.Int32");
column.ColumnName = "ChildNum";
table.Columns.Add(column);
column = new DataColumn();
column.DataType = Type.GetType("System.Int32");
column.ColumnName = "Depth";
table.Columns.Add(column);
column = new DataColumn();
column.DataType = Type.GetType("System.Int32");
column.ColumnName = "OrderNo";
table.Columns.Add(column);
//table.Columns.Clear();
}
#22
lz有意思,datatable和dataview有什么区别,代码改下不就可以用了么?
#23
楼上的递归算法有问题哦