数据表中存在对应的id则把此 treeview 节点checkbox设置为选中状态

epui2008 2014-09-05 09:57:49
某产品有3级分类,可以有多个弟三级分类,现在编辑此产品,从表中取得它所属的多个三级分类的ID值,,把 所属的三级分类 treeview 中的对应节点的checkbox 选中

  
// 取得 此产品所属 三级类别的id
SqlConnection con = new SqlConnection(_connstring);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "select * from pro_category_record where proid=@proid";
cmd.Parameters.AddWithValue("@proid", id);
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet dst = new DataSet();
using (sda)
{
sda.Fill(dst);
}
// 遍历,取得值,然后去查找对应的节点值,如果相等,则表明 这个产品属于这个分类,则把这个分类 checkbox 选中

foreach (DataRow dr in dst.Tables[0].Rows)
{
string categoryid = dr["categoryid"].ToString();

foreach (TreeNode tn in TreeView1.Nodes)
{
if (dr["categoryid"].ToString() == tn.Value)
{
tn.Selected = true;
}
}


}
// 但是这样做不正确,无效,请问 应该怎么写呢?
...全文
301 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
一刀封喉 2014-09-09
  • 打赏
  • 举报
回复
引用 12 楼 yazi_2420579196 的回复:
数据库信息绑定TreeView节点添加复选框将选中的科目存储到数据表中 //通过下拉列表绑定数据显示在TreeView控件节点 SqlConnection conn; //创建SqlConnection对象 SqlCommand cmd; //创建SqlCommamd对象 SqlDataAdapter sda; //创建SqlDataAdapter对象 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack)//如果页面第一次加载 { string str = System.Configuration.ConfigurationManager.AppSettings["conn"].ToString(); tvcourse.ShowCheckBoxes = TreeNodeTypes.Leaf;//节点添加复选框 conn = new SqlConnection(str); //建立连接 cmd = new SqlCommand("select distinct(courseType) from tbCourse", conn); sda = new SqlDataAdapter(cmd); //实例化SqlDataAdapter对象 DataSet ds = new DataSet(); sda.Fill(ds); ddlType.DataSource = ds; ddlType.DataTextField = "courseType"; ddlType.DataBind(); TreeNode TN = new TreeNode(ddlType.SelectedItem.Text); cmd = new SqlCommand("select * from tbCourse where courseType='"+ddlType.SelectedItem.Text+"'", conn); sda = new SqlDataAdapter(cmd); ds = new DataSet(); sda.Fill(ds); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { TN.ChildNodes.Add(new TreeNode(ds.Tables[0].Rows[i]["courseName"].ToString())); } tvcourse.Nodes.Add(TN); } } //更改分类重新绑定数据显示 protected void ddlType_SelectedIndexChanged(object sender, EventArgs e) { tvcourse.Nodes.Clear(); string str = System.Configuration.ConfigurationManager.AppSettings["conn"].ToString(); conn = new SqlConnection(str); TreeNode TN = new TreeNode(ddlType.SelectedItem.Text); cmd = new SqlCommand("select * from tbCourse where courseType='" + ddlType.SelectedItem.Text + "'", conn); sda = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); sda.Fill(ds); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { TN.ChildNodes.Add(new TreeNode(ds.Tables[0].Rows[i]["courseName"].ToString())); }//CodeGo.net/ tvcourse.Nodes.Add(TN); tvcourse.ExpandAll(); } //选中复选框点击按钮把所选科目添加到数据表 protected void Button1_Click(object sender, EventArgs e) { lblinfo.Text = ""; if (tvcourse.CheckedNodes.Count > 0) { foreach (TreeNode childNode in tvcourse.CheckedNodes) { lblinfo.Text += childNode.Text + " "; } } }
这是初始化树; 这个我已经做好了 现在是产品编辑页面,初始化树之后,还要 读取这个产品的N个三级分类,然后在树上把对应复选框设为选中状态
yazi_2420579196 2014-09-09
  • 打赏
  • 举报
回复
数据库信息绑定TreeView节点添加复选框将选中的科目存储到数据表中 //通过下拉列表绑定数据显示在TreeView控件节点 SqlConnection conn; //创建SqlConnection对象 SqlCommand cmd; //创建SqlCommamd对象 SqlDataAdapter sda; //创建SqlDataAdapter对象 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack)//如果页面第一次加载 { string str = System.Configuration.ConfigurationManager.AppSettings["conn"].ToString(); tvcourse.ShowCheckBoxes = TreeNodeTypes.Leaf;//节点添加复选框 conn = new SqlConnection(str); //建立连接 cmd = new SqlCommand("select distinct(courseType) from tbCourse", conn); sda = new SqlDataAdapter(cmd); //实例化SqlDataAdapter对象 DataSet ds = new DataSet(); sda.Fill(ds); ddlType.DataSource = ds; ddlType.DataTextField = "courseType"; ddlType.DataBind(); TreeNode TN = new TreeNode(ddlType.SelectedItem.Text); cmd = new SqlCommand("select * from tbCourse where courseType='"+ddlType.SelectedItem.Text+"'", conn); sda = new SqlDataAdapter(cmd); ds = new DataSet(); sda.Fill(ds); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { TN.ChildNodes.Add(new TreeNode(ds.Tables[0].Rows[i]["courseName"].ToString())); } tvcourse.Nodes.Add(TN); } } //更改分类重新绑定数据显示 protected void ddlType_SelectedIndexChanged(object sender, EventArgs e) { tvcourse.Nodes.Clear(); string str = System.Configuration.ConfigurationManager.AppSettings["conn"].ToString(); conn = new SqlConnection(str); TreeNode TN = new TreeNode(ddlType.SelectedItem.Text); cmd = new SqlCommand("select * from tbCourse where courseType='" + ddlType.SelectedItem.Text + "'", conn); sda = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); sda.Fill(ds); for (int i = 0; i < ds.Tables[0].Rows.Count; i++) { TN.ChildNodes.Add(new TreeNode(ds.Tables[0].Rows[i]["courseName"].ToString())); }//CodeGo.net/ tvcourse.Nodes.Add(TN); tvcourse.ExpandAll(); } //选中复选框点击按钮把所选科目添加到数据表 protected void Button1_Click(object sender, EventArgs e) { lblinfo.Text = ""; if (tvcourse.CheckedNodes.Count > 0) { foreach (TreeNode childNode in tvcourse.CheckedNodes) { lblinfo.Text += childNode.Text + " "; } } }
一刀封喉 2014-09-08
  • 打赏
  • 举报
回复
谢谢8楼大哥,让我如出云见日,茅塞顿开,我换换3曾嵌套repeater控件试试
  • 打赏
  • 举报
回复
foreach (DataRow dr in dst.Tables[0].Rows)
        {
            string categoryid = dr["categoryid"].ToString();
            
            foreach (TreeNode tn in TreeView1.Nodes)
            {
                if (dr["categoryid"].ToString() == tn.Value)
                {
                    tn.Selected = true;
                }
            }
             
             
        }
这个是不能这样写的,需要你自己琢磨一个递归,TreeView只能通过递归去实现
一刀封喉 2014-09-08
  • 打赏
  • 举报
回复
友情帮顶 中秋节大家都过节去了,没人在 啊
一刀封喉 2014-09-08
  • 打赏
  • 举报
回复
贴出代码:
此代码已经断点测试过

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Configuration;
using System.Data;
using System.Data.SqlClient;

public partial class newadmin_test4 : System.Web.UI.Page
{
private string _connstring = WebConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
get_lv1_data();
}
}

protected void get_lv1_data()
{
SqlConnection con = new SqlConnection(_connstring);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "select * from pro_category where pid=@pid order by shunxu";
cmd.Parameters.AddWithValue("@pid", 0);

SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet dst = new DataSet();
using (sda)
{
sda.Fill(dst);
}

lv1.DataSource = dst;
lv1.DataBind();
}
public DataSet lv2data(object lv1id)
{
SqlConnection con = new SqlConnection(_connstring);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "select * from pro_category where pid=@pid order by shunxu";
cmd.Parameters.AddWithValue("@pid", lv1id);

SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet dst = new DataSet();
using (con)
{
con.Open();
sda.Fill(dst);

}
return dst;

}
public DataSet lv3data(object lv2id)
{
SqlConnection con = new SqlConnection(_connstring);
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "select * from pro_category where pid=@pid order by shunxu";
cmd.Parameters.AddWithValue("@pid", lv2id);

SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataSet dst = new DataSet();
using (con)
{
con.Open();
sda.Fill(dst);

}
return dst;

}


}


前台页面代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="test4.aspx.cs" Inherits="newadmin_test4" %>

<html lang="en">
<head>
<meta charset="utf-8">
<title>sf</title>

</head>
<body>
<form id="form1" runat="server">
<ul>
<asp:Repeater ID="lv1" runat="server">
<ItemTemplate>
<li>
<div class="div_lv1"><span class="label_lv1"><%#Eval("categoryname") %>(<%#Eval("shunxu") %>)</span><br class="clear" /></div>
<ul class="ul_lv2">
<asp:Repeater ID="lv2" runat="server" DataSource='<%# lv2data(Eval("id")) %>'>
<ItemTemplate>
<li>
<div class="div_lv2"><span class="label_lv2"><%#Eval("categoryname") %>(<%#Eval("shunxu") %>)</span><br class="clear" />
<ul class="ul_lv3">
<asp:Repeater ID="lv3" runat="server" DataSource='<%# lv3data(Eval("id")) %>' >

<ItemTemplate>


<asp:CheckBoxList ID="CheckBoxList1" runat="server" DataTextField='<%#Eval("categoryname") %>' DataValueField='<%#Eval("id") %>'> </asp:CheckBoxList>


</ItemTemplate>
</asp:Repeater>

</ul>
</div><br class="clear" />
</li>

</ItemTemplate>

</asp:Repeater>

</ul>

</li>

<br class="clear" />
</ItemTemplate>
</asp:Repeater>
</ul>


</form>
</body>
</html>



但是得不到想要的结果
想要的是这种结果:
一刀封喉 2014-09-08
  • 打赏
  • 举报
回复
3层嵌套的repeater控件 中,最里层 repeater控件 中包含一个checkboxlist ,一直不显示,怪哉
epui2008 2014-09-06
  • 打赏
  • 举报
回复
哪位指点一下,谢谢了
epui2008 2014-09-06
  • 打赏
  • 举报
回复
1 数据没有问题 2 绑定数据显示了,也是正常的 3 可能我的初始化 treeview 有问题,造成的后面无法编程时绑定 4 大哥,能远程帮我看看吗?
我现在在路上 2014-09-06
  • 打赏
  • 举报
回复
1、下把数据取出来,看数据是否正确 2、绑定数据看是否正确 3、进行数据处理,按照你的业务进行处理,如果前面是对的,这步应该没问题
epui2008 2014-09-06
  • 打赏
  • 举报
回复
1 事件 是在 首次pageload 时候 执行的 2 先生成treeview 树,然后 执行 3 调试过,值都有,可以输出3条纪录,但是 调试时候显示 count=0; 4 我觉得主要问题还是下面的函数逻辑有问题,请大哥帮看看
  • 打赏
  • 举报
回复
你调试了吗?dst.Tables[0].Rows一共有多少行?dr["categoryid"].ToString()分别是什么值?TreeView1.Nodes一共有多少节点?你的树上一共有多少节点?tn.Value又分别是什么值?你这个代码在页面回发后的什么地方(什么事件、什么流程)执行的? 不是都爱回答简单问题,是都爱回答一看就“愿意动脑筋、肯定动手调试过”的人提出的问题。
epui2008 2014-09-06
  • 打赏
  • 举报
回复
咋没人回答啊,就这么难吗? 大家都爱回答简单问题吗?
jquery的treeview 在显示大层次树是会卡死浏览器,我结合http://www.cnblogs.com/xuanye/archive/2009/10/26/1590250.html的改进版做的这个改进版(因为很多人没读他的源码,不知道怎么请求节点的处理页面),把asp.net的json序列化 都做了进去(Newtonsoft.jsonnet2.0.dll),,采用ajax+wrapperpage+usercontrol的模式生成json(因为牵涉公司两个配置文件,必须读配置信息连接数据库,绕了一下其实可以更轻量级的handler来处理,例子不能运行,但可以看看),同时扩展了很多的配置项都有说明,希望对大家有帮助 使用例如: <script src="lib/jquery/jquery.js" type="text/javascript"> <script src="lib/jquery/plugins/treeview/js/common.js" type="text/javascript"> <script type="text/javascript"> var checknodes = "HJH8,HJA5"; //你事先要传给树控件的 已节点 id $(document).ready(function() { var o = { isAsync: false, //是否异步获取节点,根据咱的要求 设为false url: "AjaxWrapperPages/AsyncGetTreeNodes.aspx", //请求节点的页面,如果没有改变文件路径 不用关心 cbiconpath: "lib/jquery/plugins/treeview/images/icons/", //同上 checkbox icon的目录位置 //icons: ["checkbox_0.gif", "checkbox_1.gif", "checkbox_2.gif"],//不用配置 emptyiconpath: "lib/jquery/plugins/treeview/images/s.gif", //checkbxo三态的图片 animate: true, //不用配置,动画没有效果 theme: "bbit-tree-lines", //bbit-tree-lines ,bbit-tree-no-lines,bbit-tree-arrows有线、没线、箭头 三个样式选择 showcheck: true //是否显示复选框 , checkNodes: checknodes //上面 你事先要传给树控件的 已节点 id的变量 , rootText: "石化单位"//根节点的文本 可为空 则没有根节点 建议起个有意义的名字描述这棵树 //,onnodeclick: function(item) { alert(item.text); } , dbconfigPath: "~/hanwayDbConfig.hwdb" //可去掉,这是我做测试用 可不用此配置 , conStr: "conStr" //连接字符串 你可直接传,考虑安全 可不用此配置 /************ 必填项 ****************/ , sqlPath: "~/Db.hwSql" //sql语句存放的文件位置 , sqlID: "dwdyinfo" //sql对应的sqlid , dtFields: "dm,zhdm,mc" //表的结构 控件之关心3个:“主键id 外(父)键id 节点文本” 依次','分开 , pnodeMark: "dyzhgx" //和上面的dtFields的外键 用来构造过滤条件 如"zhdm='dyzhgx'" 查询出所有一级节点 }; $("#tree").treeview(o); //到服务器处理节点 $("#showchecked").click(function(e) { var changnodes = $("#tree").getTSVs(); //得到所有节点id if (changnodes != null) { changnodes = changnodes.join(","); $.ajax({ type: "get", url: "some.aspx", data: "nodes="+changnodes, success: function(msg) { alert("Data Saved: " + msg); } }); } });

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧