数据库数据有240条数据,菜单深度是3级,生成树好慢,差不多要10s钟才能出现窗口看到树!,等待求解!....啥米情况?
//递归生成树
private void CreateNode(TreeNode tn, string parentid)
{
DB db = new DB();
foreach (TreeInfo treeinfo in db.getList(parentid))
{
TreeNode tntemp = new TreeNode();
tntemp.Text = treeinfo.MenuName;
tntemp.ImageIndex = treeinfo.Icon;
tntemp.SelectedImageIndex = treeinfo.Icon;
string fatherMenuId = treeinfo.MenuId;
CreateNode(tntemp, fatherMenuId);
tn.Nodes.Add(tntemp);
}
}
//加载窗体
private void FrmMain_Load(object sender, EventArgs e)
{
treeView1.Nodes.Clear();
TreeNode Node1 = new TreeNode("Root");
treeView1.Nodes.Add(Node1);
CreateNode(Node1, "10000");
}
//数据库取值
public List<TreeInfo> getList(string fatherMenuId)
{
List<TreeInfo> list = new List<TreeInfo>(); OleDbConnection oleDbConn = OpenConnection(); StringBuilder sb = new StringBuilder();
if (fatherMenuId != "")
{
sb.Append("SELECT * FROM MenuTree WHERE FatherMenuId='" + fatherMenuId + "'"); OleDbCommand oleDbComm = new OleDbCommand(sb.ToString(), oleDbConn);
OleDbDataReader oleDbReader = oleDbComm.ExecuteReader(); while (oleDbReader.Read())
{
TreeInfo treeInfo = new TreeInfo();
treeInfo.MenuId = oleDbReader["MenuId"].ToString();
treeInfo.MenuName = oleDbReader["MenuName"].ToString();
treeInfo.Icon = Convert.ToInt32(oleDbReader["Icon"].ToString());
treeInfo.FatherMenuId = oleDbReader["FatherMenuId"].ToString(); list.Add(treeInfo);
} oleDbConn.Close();
}
return list;
}
//递归生成树
private void CreateNode(TreeNode tn, string parentid)
{
DB db = new DB();
foreach (TreeInfo treeinfo in db.getList(parentid))
{
TreeNode tntemp = new TreeNode();
tntemp.Text = treeinfo.MenuName;
tntemp.ImageIndex = treeinfo.Icon;
tntemp.SelectedImageIndex = treeinfo.Icon;
string fatherMenuId = treeinfo.MenuId;
CreateNode(tntemp, fatherMenuId);
tn.Nodes.Add(tntemp);
}
}
//加载窗体
private void FrmMain_Load(object sender, EventArgs e)
{
treeView1.Nodes.Clear();
TreeNode Node1 = new TreeNode("Root");
treeView1.Nodes.Add(Node1);
CreateNode(Node1, "10000");
}
//数据库取值
public List<TreeInfo> getList(string fatherMenuId)
{
List<TreeInfo> list = new List<TreeInfo>(); OleDbConnection oleDbConn = OpenConnection(); StringBuilder sb = new StringBuilder();
if (fatherMenuId != "")
{
sb.Append("SELECT * FROM MenuTree WHERE FatherMenuId='" + fatherMenuId + "'"); OleDbCommand oleDbComm = new OleDbCommand(sb.ToString(), oleDbConn);
OleDbDataReader oleDbReader = oleDbComm.ExecuteReader(); while (oleDbReader.Read())
{
TreeInfo treeInfo = new TreeInfo();
treeInfo.MenuId = oleDbReader["MenuId"].ToString();
treeInfo.MenuName = oleDbReader["MenuName"].ToString();
treeInfo.Icon = Convert.ToInt32(oleDbReader["Icon"].ToString());
treeInfo.FatherMenuId = oleDbReader["FatherMenuId"].ToString(); list.Add(treeInfo);
} oleDbConn.Close();
}
return list;
}
解决方案 »
- 想做个论坛,发现网上的论坛好像都不用.net控件来获取数据
- datagridview 列添加了combobox,怎么使 列单元格能编辑并显示内容
- socket通讯中“每个套接字地址(协议/网络地址/端口)只允许使用一次”
- TcpClient传图片的问题的问题,图片只能显示半张图片
- 设计中,关于 as 关键字强制转换的效率是不是需要考虑?
- 新手求助
- 设置AutoScroll后,怎样强制隐藏横向滚动条?
- .net 人员需求
- 大家帮我个忙刚学C#。高分
- 在 DataGrid 中,如何根据不同的值(true / false)在字段中显示不同的图片?
- 问个问题
- 新手:C#winform项目想要将每个窗体用dll封装。要怎么做?
foreach (TreeInfo treeinfo in db.getList(parentid))
开始load一次就够了,后面就直接使用数据集,循环里面的item
直接用DataTabel取出来,然后再取?
CREATE TABLE MENUITEM
(
ITEMID VARCHAR2(100 BYTE), //ID
TEXT VARCHAR2(100 BYTE),//树要显示的
PARENTITEMID VARCHAR2(100 BYTE),//父ID同ITEMID
FORMNAME VARCHAR2(100 BYTE),//窗体名
ISMODULE VARCHAR2(100 BYTE),//是否还有子阶
LEVELA VARCHAR2(100 BYTE),//没用
IMAGENAME VARCHAR2(100 BYTE)//没用
)生成树函数
_datatable为SQL查询出来返回的表. public void Load_TreeView( int ParentID, TreeNode pNode)
{
DataView dvTree = _datatable.DefaultView;
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[PARENTITEMID] = " + ParentID;
//ArrayList Document = new ArrayList();
foreach (DataRowView Row in dvTree)
{
if (pNode == null)
{
TreeNode Node = _treeview.Nodes.Add(Row["TEXT"].ToString());
Node.Name = Row["ITEMID"].ToString();
Load_TreeView(Int32.Parse(Row["ITEMID"].ToString()), Node); //再次递归
} else
{ //添加当前节点的子节点
TreeNode Node = pNode.Nodes.Add(Row["TEXT"].ToString());
Node.Name = Row["ITEMID"].ToString();
//Document.Add(new ListViewItem(Row["TEXT"].ToString(), 1));
//pNode.Tag = Document; Load_TreeView(Int32.Parse(Row["ITEMID"].ToString()), Node); //再次递归
}
}
}