c# winform treeview加载数据的有关问题
c# winform treeview加载数据的问题
我的数据库表:
A B C
01 财务部 小明
02 业务部 小花
03 财务部 小刚
04 业务部 小李
我想加载的时候自动识别部门,然后在里面加名字
比如:
财务部
小明
小刚
业务部
小花
小李
怎样实现呀,不熟悉,那个高手给些代码参考下,谢谢
------解决方案--------------------
按部门分组,使用group by
------解决方案--------------------
class NodeData{
public int iType = 0; //0:部门 1:人员
pubic int ID = 0; //
public string Name = " ";
}
data = new new NodeData( "部门1 ",0,1)
node = tv.Nodes.Add(data.Name);
node.Tag = data;
data = new NodeData( "员工 ",1,3)
node.Node.Add(data.Name)
node.Tag = data;
------解决方案--------------------
DataRow[] rows = table.Select("B='财务部'");
------解决方案--------------------
先加载部门节点,然后加载当前部门下的人员节点,递归实现!
------解决方案--------------------
你说的部门分类主要就是parentID的原因吧,你把节点过滤下就行,比如:
private void InitTree(TreeNodeCollection tnc, int parentid)
{
DataView dv = new DataView();
TreeNode tmpNode;
dv.Table = RhytonIAASVM.Web.BLL.SysManage.Permission.GetList().Tables[0];
dv.RowFilter = "parentid=" + parentid + "";//节点过滤
foreach (DataRowView dr in dv) {
tmpNode = new TreeNode();
tmpNode.Value = dr["permid"].ToString();
tmpNode.Text = dr["permname"].ToString();
//tmpNode.NavigateUrl = "#";
tmpNode.ShowCheckBox = true;
tnc.Add(tmpNode);
InitTree(tmpNode.ChildNodes,int.Parse(tmpNode.Value));
}
}
#region 初始化权限树
private void InitData() {
this.TreeView1.Nodes.Clear();
InitTree(TreeView1.Nodes, 0);
checkNode(TreeView1);
}
#endregion
------解决方案--------------------
动态加载就用循环就好了。
我的数据库表:
A B C
01 财务部 小明
02 业务部 小花
03 财务部 小刚
04 业务部 小李
我想加载的时候自动识别部门,然后在里面加名字
比如:
财务部
小明
小刚
业务部
小花
小李
怎样实现呀,不熟悉,那个高手给些代码参考下,谢谢
------解决方案--------------------
按部门分组,使用group by
------解决方案--------------------
class NodeData{
public int iType = 0; //0:部门 1:人员
pubic int ID = 0; //
public string Name = " ";
}
data = new new NodeData( "部门1 ",0,1)
node = tv.Nodes.Add(data.Name);
node.Tag = data;
data = new NodeData( "员工 ",1,3)
node.Node.Add(data.Name)
node.Tag = data;
------解决方案--------------------
DataRow[] rows = table.Select("B='财务部'");
------解决方案--------------------
先加载部门节点,然后加载当前部门下的人员节点,递归实现!
------解决方案--------------------
你说的部门分类主要就是parentID的原因吧,你把节点过滤下就行,比如:
private void InitTree(TreeNodeCollection tnc, int parentid)
{
DataView dv = new DataView();
TreeNode tmpNode;
dv.Table = RhytonIAASVM.Web.BLL.SysManage.Permission.GetList().Tables[0];
dv.RowFilter = "parentid=" + parentid + "";//节点过滤
foreach (DataRowView dr in dv) {
tmpNode = new TreeNode();
tmpNode.Value = dr["permid"].ToString();
tmpNode.Text = dr["permname"].ToString();
//tmpNode.NavigateUrl = "#";
tmpNode.ShowCheckBox = true;
tnc.Add(tmpNode);
InitTree(tmpNode.ChildNodes,int.Parse(tmpNode.Value));
}
}
#region 初始化权限树
private void InitData() {
this.TreeView1.Nodes.Clear();
InitTree(TreeView1.Nodes, 0);
checkNode(TreeView1);
}
#endregion
------解决方案--------------------
动态加载就用循环就好了。
- C# code
string strsql = "Select Department from UserInfo group by Department";
DataSet DsforTree = new DataSet();
DsforTree = ObjectMaster.GetDatasetBySql(strsql, "UserInfo");//这是获取DataSet
for (int i = 0; i < DsforTree.Tables[0].Rows.Count; i++)
{
treeView1.Nodes.Add(DsforTree.Tables["UserInfo"].Rows[i]["Department"].ToString());
treeView1.Nodes[i].ImageIndex = 0;
string SQLsentence = "Select * from UserInfo where Department='" + treeView1.Nodes[i].Text + "'";
DataSet DsforTreeofaDepartment = new DataSet();
DsforTreeofaDepartment = ObjectMaster.GetDatasetBySql(SQLsentence, "UserInfo");
for (int j = 0; j < DsforTreeofaDepartment.Tables[0].Rows.Count; j++)
{
treeView1.Nodes[i].Nodes.Add(DsforTreeofaDepartment.Tables["UserInfo"].Rows[j]["nickname"].ToString());
treeView1.Nodes[i].Nodes[j].ImageIndex = 2;
}
}
------解决方案--------------------
将数据先加载到一个 DataTable 中,这个不需要多说了吧
假设 DataTable 中字段名为 id, dept, name
窗体上有一 TreeView 控件名为 treeView1
下面的代码仅供参考
- C# code
private void Form1_Load(object sender, EventArgs e)
{
// 模拟数据加载
DataTable table = new DataTable();
table.Columns.AddRange(
new DataColumn[] {
new DataColumn("id", typeof(int)),
new DataColumn("dept", typeof(string)),
new DataColumn("name", typeof(string))
});
table.Rows.Add(new object[] { 1, "财务部", "小红" });
table.Rows.Add(new object[] { 2, "业务部", "小明" });
table.Rows.Add(new object[] { 3, "财务部", "小花" });
table.Rows.Add(new object[] { 4, "财务部", "小刚" });
table.Rows.Add(new object[] { 5, "业务部", "小李" });
// 利用 LINQ 进行查询和数据转换
var data = table.Rows.Cast<DataRow>()
.Select(row => new
{
id = Convert.ToInt32(row["id"]),
dept = row["dept"] == null ? "" : row["dept"] as string,
name = row["name"] == null ? "" : row["name"] as string,
});
// 加载部门和人员并直接生成 TreeNodes
var depts = data
.Select(row => row.dept)
.Distinct()
.Select(d => new TreeNode(d, data
.Where(row => row.dept == d)
.Select(row => new TreeNode(row.name)).ToArray()))
.ToArray();
treeView1.Nodes.AddRange(depts);
}