高分相求Tree关联表格的解决方法(C#) 本帖最后由 xiao0919 于 2010-05-12 16:10:00 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我只想到一个比较笨的方法用div吧,把表格放到对应的div中,点击div的标题时控制div的显示或隐藏 如果你只是想实现树的父子关系,可以自己拼表格形成,我之前也做了个这种的,类似csdn的导航树给你个小例子吧//自定义树绑定 private void TreeDataBind() { string strcomm; if (IsLog == "0") { strcomm = "select subiid, iid, subindustry, subtip, '0' as isin from client_sub_industry where status=1"; } else { strcomm = "SELECT a.subiid, a.iid, subindustry, subtip, isin = CASE WHEN a.subiid IN (SELECT subiid FROM qun_users WHERE (logname = '" + User.Identity.Name + "')) THEN '1' ELSE '0' END FROM client_sub_industry a WHERE (status = 1)"; } DataSet ds = PycSQLHelper.SqlHelper.ExecuteDataset(PycSQLHelper.SqlHelper.StoreConnString, CommandType.Text, strcomm); DataTable dt = ds.Tables[0]; DataView dv = dt.DefaultView; dv.RowFilter = "iid=" + "0"; foreach (DataRowView drv in dv) { string tdpid = drv["subiid"].ToString(); //输出父类 SbTree.Append("<tr>"); SbTree.Append("<td id=\"" + "p" + tdpid + "\" colspan=\"3\" style=\"width: 100%;font-size:10.5pt\" onmousemove=\"ShowHand(this)\" onclick=\"nodeClick(this)\">"); SbTree.Append("<a herf=\"\">" + drv["subindustry"] + "</a>"); SbTree.Append("</td>"); SbTree.Append("</tr>"); AddReplies(dt, drv["subiid"].ToString()); } this.ltTree.Text = SbTree.ToString(); } //树状菜单绑定-递归函数 private static void AddReplies(DataTable dt, string ss) { DataView dv = new DataView(dt); dv.RowFilter = "iid= " + ss; //如果包含小分类,则开始输出小分类 if (dv.Count > 0) { foreach (DataRowView drv in dv) { string tdid = drv["subiid"].ToString(); string subtipid = "subtip" + tdid; SbTree.Append("<tr>"); SbTree.Append("<td id=\"" + tdid + "\" style=\"width:160px;text-align:left;\" onclick=\"nodeClick(this)\" onmousemove=\"ShowHand(this)\" onmouseout=\"layer_show(this,'hide')\" onmouseover=\"layer_show(this,'show')\">"); SbTree.Append(" " + "<a herf=\"\">" + drv["subindustry"] + "</a>"); SbTree.Append("</td>"); SbTree.Append("<td style=\"width:60px;text-align:left;\">"); SbTree.Append(GetNum(drv["subiid"].ToString())); SbTree.Append("</td>"); SbTree.Append("<td style=\"text-align:right; width:20px;\">"); if (drv["isin"].ToString() == "1") { SbTree.Append("<img alt=\"退出\" title=\"退出\" src=\"../images/减.jpg\" id=\"" + "quit" + tdid + "\" onclick=\"joinC(this)\"/>"); SbTree.Append("<img alt=\"加入\" title=\"加入\" src=\"../images/加.jpg\" id=\"" + "join" + tdid + "\" style=\"display:none\" onclick=\"joinC(this)\"/>"); } else { SbTree.Append("<img alt=\"退出\" title=\"退出\" src=\"../images/减.jpg\" id=\"" + "quit" + tdid + "\" style=\"display:none\" onclick=\"joinC(this)\"/>"); SbTree.Append("<img alt=\"加入\" title=\"加入\" src=\"../images/加.jpg\" id=\"" + "join" + tdid + "\" onclick=\"joinC(this)\"/>"); } SbTree.Append("</td>"); SbTree.Append("</tr>"); SbTree.Append("<div id=\"" + subtipid + "\" class=\"zhushi\" style=\"visibility:hidden;overflow:auto; position:absolute \">"); SbTree.Append(drv["subtip"]); SbTree.Append("/div>"); AddReplies(dt, drv["subiid"].ToString()); } } }<div id="left" runat="server" style="float: left; text-align: left; width: 255px; height: 586px; overflow-y: scroll; border: #003278 1px solid"> <table width="90%"> <asp:Literal ID="ltTree" runat="server"></asp:Literal></table> </div>我这个因为没要求展开\收缩,所以没做,你可以自己加上,挺简单的 看这个帖子,一样的问题:http://topic.csdn.net/u/20100505/08/afda7156-fe7e-49a1-8bd2-65a0c0a4f449.html?6124 前台添加treeview控件,后台这样加代码: TreeNode tr = new TreeNode(" <table border='1' cellspacing='0' cellpadding='0' width=\"100%\"><tr><td>111</td><td>222</td></tr></table> ");tvMenu.Nodes.Add(tr); //tvMenu是你前台treeview的id这种方法就是注意一下双引号,要么用单引号代替,要么用\"代替即可 我目前的想法是这样的:treeView的数据来自数据库表 RW(nodeId,parentId,nodeName),在没有现成表格控件的前提下,右边的表格和数据(开始时间、结束时间、工时)可以用paint()画出来,但是,主要问题是:1右边表格和数据与Tree对齐(通过ViewTree的属性);2如何让右边表格跟随Tree扩展和收缩,可能做起来比较麻烦。3如果左边不用TreeView控件,那么这个树怎样实现类似于TreeView控件的可以设置展开层次的属性,要有公共属性nodeId进而可以编辑表格中的内容;当然,最好是有现成的表格控件,可以实现和TreeView搭配使用的。 自己顶,看有没有Graphics高手。 C#菜鸟,忘大神帮助啊,图形界面问题DataGridView.CellClick 事件 问一个文件的问题 在线求SQL语句 如何得到唯一值 切换窗口的问题 C#开发水果机 如何实现类似QQ面板窗体 DetailsView 控件 做了一个小东西(WinForm),为什么运行结束了在系统的任务管理器里面还能看到进程! 关于C#继承封装的问题 保存C# js onclick对应的值,就是菜单栏li onclick事件方法参数li 根据id里有给它背景图片,然后想在刷新页面让它保持点击菜单的背景样式 新手提问-单纯用代码实现WinForm编程,有何好处? 求c# 采用应答式发送文件的例子
用div吧,把表格放到对应的div中,点击div的标题时控制div的显示或隐藏
给你个小例子吧//自定义树绑定
private void TreeDataBind()
{
string strcomm;
if (IsLog == "0")
{
strcomm = "select subiid, iid, subindustry, subtip, '0' as isin from client_sub_industry where status=1";
}
else
{
strcomm =
"SELECT a.subiid, a.iid, subindustry, subtip, isin = CASE WHEN a.subiid IN (SELECT subiid FROM qun_users WHERE (logname = '" + User.Identity.Name + "')) THEN '1' ELSE '0' END FROM client_sub_industry a WHERE (status = 1)";
}
DataSet ds =
PycSQLHelper.SqlHelper.ExecuteDataset(PycSQLHelper.SqlHelper.StoreConnString, CommandType.Text, strcomm);
DataTable dt = ds.Tables[0];
DataView dv = dt.DefaultView;
dv.RowFilter = "iid=" + "0";
foreach (DataRowView drv in dv)
{
string tdpid = drv["subiid"].ToString();
//输出父类
SbTree.Append("<tr>");
SbTree.Append("<td id=\"" + "p" + tdpid + "\" colspan=\"3\" style=\"width: 100%;font-size:10.5pt\" onmousemove=\"ShowHand(this)\" onclick=\"nodeClick(this)\">");
SbTree.Append("<a herf=\"\">" + drv["subindustry"] + "</a>");
SbTree.Append("</td>");
SbTree.Append("</tr>");
AddReplies(dt, drv["subiid"].ToString());
}
this.ltTree.Text = SbTree.ToString();
}
//树状菜单绑定-递归函数
private static void AddReplies(DataTable dt, string ss)
{
DataView dv = new DataView(dt);
dv.RowFilter = "iid= " + ss;
//如果包含小分类,则开始输出小分类
if (dv.Count > 0)
{
foreach (DataRowView drv in dv)
{
string tdid = drv["subiid"].ToString();
string subtipid = "subtip" + tdid;
SbTree.Append("<tr>");
SbTree.Append("<td id=\"" + tdid + "\" style=\"width:160px;text-align:left;\" onclick=\"nodeClick(this)\" onmousemove=\"ShowHand(this)\" onmouseout=\"layer_show(this,'hide')\" onmouseover=\"layer_show(this,'show')\">");
SbTree.Append(" " + "<a herf=\"\">" + drv["subindustry"] + "</a>");
SbTree.Append("</td>");
SbTree.Append("<td style=\"width:60px;text-align:left;\">");
SbTree.Append(GetNum(drv["subiid"].ToString()));
SbTree.Append("</td>");
SbTree.Append("<td style=\"text-align:right; width:20px;\">");
if (drv["isin"].ToString() == "1")
{
SbTree.Append("<img alt=\"退出\" title=\"退出\" src=\"../images/减.jpg\" id=\"" + "quit" + tdid + "\" onclick=\"joinC(this)\"/>");
SbTree.Append("<img alt=\"加入\" title=\"加入\" src=\"../images/加.jpg\" id=\"" + "join" + tdid + "\" style=\"display:none\" onclick=\"joinC(this)\"/>");
}
else
{
SbTree.Append("<img alt=\"退出\" title=\"退出\" src=\"../images/减.jpg\" id=\"" + "quit" + tdid + "\" style=\"display:none\" onclick=\"joinC(this)\"/>");
SbTree.Append("<img alt=\"加入\" title=\"加入\" src=\"../images/加.jpg\" id=\"" + "join" + tdid + "\" onclick=\"joinC(this)\"/>");
}
SbTree.Append("</td>");
SbTree.Append("</tr>");
SbTree.Append("<div id=\"" + subtipid + "\" class=\"zhushi\" style=\"visibility:hidden;overflow:auto; position:absolute \">");
SbTree.Append(drv["subtip"]);
SbTree.Append("/div>");
AddReplies(dt, drv["subiid"].ToString());
}
}
}
<div id="left" runat="server" style="float: left; text-align: left; width: 255px; height: 586px;
overflow-y: scroll; border: #003278 1px solid">
<table width="90%">
<asp:Literal ID="ltTree" runat="server"></asp:Literal></table>
</div>我这个因为没要求展开\收缩,所以没做,你可以自己加上,挺简单的
http://topic.csdn.net/u/20100505/08/afda7156-fe7e-49a1-8bd2-65a0c0a4f449.html?6124
tvMenu.Nodes.Add(tr); //tvMenu是你前台treeview的id这种方法就是注意一下双引号,要么用单引号代替,要么用\"代替即可
treeView的数据来自数据库表 RW(nodeId,parentId,nodeName),
在没有现成表格控件的前提下,右边的表格和数据(开始时间、结束时间、工时)可以用paint()画出来,
但是,主要问题是:1右边表格和数据与Tree对齐(通过ViewTree的属性);2如何让右边表格跟随Tree扩展和收缩,可能做起来比较麻烦。3如果左边不用TreeView控件,那么这个树怎样实现类似于TreeView控件的可以设置展开层次的属性,要有公共属性nodeId进而可以编辑表格中的内容;当然,最好是有现成的表格控件,可以实现和TreeView搭配使用的。