希望有实力的朋友了以后能指点我改一下选中和不选中的递归
前台代码

<div style="font-size:14px;">
<asp:TreeView ShowCheckBoxes="All" ID="usertree" runat="server" OnTreeNodeCheckChanged="MyTreeView_TreeNodeCheckChanged" OnSelectedNodeChanged="MyTreeView_SelectedNodeChanged" >
</asp:TreeView>
</div>
<div style="float:left;">
<span style="display:block">要参加人员:</span>
<asp:ListBox ID="NeedExamStaff" AutoPostBack="true" runat="server" Height="262px" Width="116px" SelectionMode="Multiple">
<asp:ListItem Value="张三"></asp:ListItem>
<asp:ListItem Value="李四"></asp:ListItem>
<asp:ListItem>王五</asp:ListItem>
</asp:ListBox>
<hr />
<span style="margin-bottom:0px">总 人 员:<asp:TextBox ID="NeedStaffNumber" runat="server" Text="" Enabled="false" Height="16px" Width="56px"></asp:TextBox><br /><span style="color:red;font-size:small" id="VNeedStaffNumber" runat="server"></span></span>
</div>
<asp:Button ID="Button1" runat="server" Text="确定" OnClick="Button1_Click" Height="21px" />
后台代码

DataTable dt = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SqlConnection conn = new SqlConnection();
conn.ConnectionString = "User ID=sa;Initial Catalog=newtest;Data Source=JJ-PC;Password=123";
// 打开连接
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
var sql = "select * from city";
// 初始化命令
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.Text;
cmd.CommandText = sql;
// 用于执行数据插入、更新和删除的操作;返回被影响的行数。
int i = cmd.ExecuteNonQuery();
// 如果想获取数据集合的话我们经常使用到的是数据适配器
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = cmd;
adapter.Fill(dt);
this.usertree.Nodes.Clear();
usertree.Attributes.Add("onclick", " postBackByObject()");
AddTree(110000, (TreeNode)null);
}
}
//递归添加树的节点
public void AddTree(int ParentID, TreeNode pNode)
{
DataTable ds = dt;
DataView dvTree = new DataView(ds);
//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "[fatherID] = " + ParentID;
foreach (DataRowView Row in dvTree)
{
TreeNode Node = new TreeNode();
if (pNode == null)
{
//添加根节点
Node.Text = Row[2].ToString();
Node.Value = Row[1].ToString();
this.usertree.Nodes.Add(Node);
Node.Expanded = true;
Node.ShowCheckBox = true;
//再次递归
AddTree(Int32.Parse(Row[1].ToString()), Node);
}
else
{
//添加当前节点的子节点
Node.Text = Row[2].ToString();
Node.Value = Row[1].ToString();
pNode.ChildNodes.Add(Node);
Node.Expanded = true;
Node.ShowCheckBox = true;
//再次递归
AddTree(Int32.Parse(Row[1].ToString()), Node);
}
}
}
protected void MyTreeView_TreeNodeCheckChanged(object sender, TreeNodeEventArgs e)
{
TreeNode node = e.Node;
var nodeCount = node.ChildNodes.Count;
if (node.Checked == true)
{
if (nodeCount > 0)
{
for (var i = 0; i < nodeCount; i++)
{
node.ChildNodes[i].Checked = true;
var node1Count = node.ChildNodes[i].ChildNodes.Count;
if (node1Count > 0)
{
for (var k = 0; k < node1Count; k++)
{
node.ChildNodes[i].ChildNodes[k].Checked = true;
var node2Count = node.ChildNodes[i].ChildNodes[k].ChildNodes.Count;
if (node2Count > 0)
{
for (var j = 0; j < node2Count; j++)
{
node.ChildNodes[i].ChildNodes[k].ChildNodes[j].Checked = true;
}
}
}
}
}
}
}
else
{
if (nodeCount > 0)
{
for (var i = 0; i < nodeCount; i++)
{
node.ChildNodes[i].Checked = false;
var node1Count = node.ChildNodes[i].ChildNodes.Count;
if (node1Count > 0)
{
for (var k = 0; k < node1Count; k++)
{
node.ChildNodes[i].ChildNodes[k].Checked = false;
var node2Count = node.ChildNodes[i].ChildNodes[k].ChildNodes.Count;
if (node2Count > 0)
{
for (var j = 0; j < node2Count; j++)
{
node.ChildNodes[i].ChildNodes[k].ChildNodes[j].Checked = false;
}
}
}
}
}
}
}
}
protected void MyTreeView_SelectedNodeChanged(object sender, EventArgs e)
{
var tt = usertree.SelectedNode.Checked;
var dd = usertree.SelectedValue;
databind();
}
public void databind()
{
if (usertree.SelectedNode.Checked == false)
{
if (usertree.SelectedNode.ChildNodes.Count > 0)
{
foreach (TreeNode subNode in usertree.SelectedNode.ChildNodes)
{
usertree.SelectedNode.Checked = true;
subNode.Checked = true;
if (subNode.ChildNodes.Count > 0)
{
foreach (TreeNode subNode2 in subNode.ChildNodes)
{
subNode2.Checked = true;
if (subNode2.ChildNodes.Count > 0)
{
foreach (TreeNode subNode3 in subNode2.ChildNodes)
{
subNode3.Checked = true;
}
}
}
}
}
}
else
{
usertree.SelectedNode.Checked = true;
}
}
else
{
if (usertree.SelectedNode.ChildNodes.Count > 0)
{
foreach (TreeNode subNode in usertree.SelectedNode.ChildNodes)
{
usertree.SelectedNode.Checked = false;
subNode.Checked = false;
if (subNode.ChildNodes.Count > 0)
{
foreach (TreeNode subNode2 in subNode.ChildNodes)
{
subNode2.Checked = false;
if (subNode2.ChildNodes.Count > 0)
{
foreach (TreeNode subNode3 in subNode2.ChildNodes)
{
subNode3.Checked = false;
}
}
}
}
}
}
else
{
usertree.SelectedNode.Checked = false;
}
}
usertree.SelectedNode.Selected = false;
}
protected void Button1_Click(object sender, EventArgs e)
{
foreach (TreeNode tn in usertree.CheckedNodes)
{
try
{
string userid = tn.Value.ToString();
ListItem li = new ListItem();
li.Text = tn.Value;
li.Value = tn.Text;
var tt = 0;
for (var i = 0; i < NeedExamStaff.Items.Count; i++)
{
if (NeedExamStaff.Items[i].Value == li.Value)
{
tt = 1;
}
}
if (tt == 0)
{
this.NeedExamStaff.Items.Add(li);
if (this.NeedStaffNumber.Text != "")
{
this.NeedStaffNumber.Text = (Convert.ToInt32(this.NeedStaffNumber.Text) + 1).ToString();
this.VNeedStaffNumber.InnerText = "";
}
else
{
this.NeedStaffNumber.Text = "1";
this.VNeedStaffNumber.InnerText = "";
}
}
}
catch
{
}
}
}
来源:https://www.cnblogs.com/yuanjiehot/p/4396092.html
