遍历checkbox及部分选取问题
下面是我写的一段程序的部分代码,目的是实现树型目录,同时给每一项中添加一个checkbox.现在树型目录的显示和赋值都没问题。
但checkbox取不到值,还有我想实现选取上一级目录的checkbox时,属于它这一层的
checkbox同时选中,不知如何实现。请大家帮忙!
private string ShowTree()
{
string ConnSql1= " ";
string ConnSql2= " ";
string ConnSql3= " ";
string ConnSql4= " ";
string ConnSql5= " ";
ConnSql1= "select ID,Name from WebStruct where ParentID= '0 ' order by OrderN ";
DataSet RsCatalog1=new DataSet ();
RsCatalog1=Dbc.getBinding (ConnSql1, "s ");strTree= " <div style= 'cursor:hand '> ";
if (RsCatalog1.Tables[0].Rows.Count> 0)
{
for (int i=0;i <RsCatalog1.Tables[0].Rows.Count;i++)
{
ConnSql2= "select ID,Name from WebStruct where ParentID= ' "+RsCatalog1.Tables[0].Rows [i][ "ID "].ToString() + " ' order by OrderN ";
DataSet RsCatalog2=new DataSet ();
RsCatalog2=Dbc.getBinding (ConnSql2, "s ");
if (RsCatalog2.Tables[0].Rows.Count> 0)
{
strTree=strTree+ " <IMG SRC= '../images/folder.gif ' border=0 ID= 'Gradesi "+i+ " ' CLASS= 'Outline ' WIDTH= '16 ' HEIGHT= '16 '> <INPUT type= 'CheckBox ' ID= ' "+RsCatalog1.Tables[0].Rows [i][ "ID "].ToString()+ " ' Text= ' "+RsCatalog1.Tables[0].Rows [i][ "Name "].ToString()+ " '> "+RsCatalog1.Tables[0].Rows [i][ "Name "].ToString()+ " <br> ";
strTree=strTree+ " <DIV ID=Gradesi "+i+ "d STYLE= 'display:none ' CLASS= 'hide '> ";
for (int j=0;j <RsCatalog2.Tables[0].Rows.Count;j++)
{
ConnSql3= "select ID,Name from WebStruct where ParentID= ' "+RsCatalog2.Tables[0].Rows [j][ "ID "].ToString() + " ' order by OrderN ";
DataSet RsCatalog3=new DataSet ();
RsCatalog3=Dbc.getBinding (ConnSql3, "s ");
}
strTree=strTree+ " </div> ";
}
else
{strTree=strTree+ " <IMG SRC= '../images/ofolder.gif ' border=0 WIDTH= '16 ' HEIGHT= '16 '> <INPUT type= 'CheckBox ' ID= ' "+RsCatalog1.Tables[0].Rows [i][ "ID "].ToString()+ " ' Text= ' "+RsCatalog1.Tables[0].Rows [i][ "Name "].ToString()+ " '> "+RsCatalog1.Tables[0].Rows [i][ "Name "].ToString()+ " <br> ";
}
}
}
else
{
strTree=strTree+ " <font color=red> <b> 尚未添加数据,请与系统管理员联系! </b> </font> ";
}
strTree=strTree+ " </div> ";
return strTree;
}
[解决办法]
using System;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class Left : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
BindTree();
//InitTree();
}
}
#region 主从表绑定
private void BindTree()
{
DataSet dst = GetTreeViewData();
TreeView1.ShowCheckBoxes = TreeNodeTypes.All;
foreach (DataRow masterRow in dst.Tables[ "province "].Rows)
{
TreeNode masterNode = new TreeNode((string)masterRow[ "province "]);
TreeView1.Nodes.Add(masterNode);
foreach (DataRow childRow in masterRow.GetChildRows( "Children "))
{
TreeNode childNode =new TreeNode((string)childRow[ "city "]);
masterNode.Expanded = false;
masterNode.ChildNodes.Add(childNode);
}
}
}
private DataSet GetTreeViewData()
{
string constring = System.Configuration.ConfigurationSettings.AppSettings[ "ConnectionStr "];
SqlConnection con = new SqlConnection(constring);
SqlDataAdapter daprovince = new SqlDataAdapter( "SELECT * FROM province ", con);
SqlDataAdapter dacity = new SqlDataAdapter( "SELECT * FROM city ", con);
DataSet ds = new DataSet();
daprovince.Fill(ds, "province ");
dacity.Fill(ds, "city ");
ds.Relations.Add( "Children ", ds.Tables[ "province "].Columns[ "provinceid "], ds.Tables[ "city "].Columns[ "father "]);
return ds;
}
#endregion
#region 递归绑定同一个表数据
private void InitTree()
{
DataTable dt = GetTreeViewTable();
DataView dv = new DataView(dt);
dv.RowFilter = "ParentID=0 ";
TreeView1.ShowCheckBoxes = TreeNodeTypes.All;
foreach (DataRowView drv in dv)
{
TreeNode node = new TreeNode();
node.Text = drv[ "text "].ToString();
node.Value = drv[ "ID "].ToString();
node.Expanded = false;
TreeView1.Nodes.Add(node);
AddReplies(dt,node);
}
}
private DataTable GetTreeViewTable()
{
string constring = System.Configuration.ConfigurationSettings.AppSettings[ "ConnectionStr "];
SqlConnection con = new SqlConnection(constring);
SqlDataAdapter da = new SqlDataAdapter( "SELECT * FROM treeview ", con);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
private void AddReplies(DataTable dt, TreeNode node)
{
DataView dv = new DataView(dt);
dv.RowFilter = "ParentID= ' " + node.Value + " ' ";
foreach (DataRowView row in dv)
{
TreeNode replyNode = new TreeNode();
replyNode.Text = row[ "text "].ToString();
replyNode.Value = row[ "ID "].ToString();
replyNode.Expanded = false;
node.ChildNodes.Add(replyNode);
AddReplies(dt,replyNode);
}
}
#endregion
}
------解决方案--------------------
用html的checkbox就可以了啊,使用 <input id= '[本身的id] ' name= '[父id] ' type= 'checkbox '>
当选中的时候用document遍历所有的checkbox类型就可以了啊做个三级嵌套的for循环,或者索性使用递归函数
[解决办法]
var c_List = document.getElementsByTarget( 'input ');
for(var i = 0; i < c_List.length; i ++)
{
if(c_List[i].type == 'checkbox ')
{
}
}