首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

遍历checkbox及部分选取有关问题

2012-01-21 
遍历checkbox及部分选取问题下面是我写的一段程序的部分代码,目的是实现树型目录,同时给每一项中添加一个c

遍历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+ "&nbsp; <IMG   SRC= '../images/folder.gif '   border=0   ID= 'Gradesi "+i+ " '   CLASS= 'Outline '   WIDTH= '16 '   HEIGHT= '16 '> &nbsp; <INPUT   type= 'CheckBox '   ID= ' "+RsCatalog1.Tables[0].Rows   [i][ "ID "].ToString()+ " '   Text= ' "+RsCatalog1.Tables[0].Rows   [i][ "Name "].ToString()+ " '> &nbsp;&nbsp; "+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+ "&nbsp; <IMG   SRC= '../images/ofolder.gif '   border=0   WIDTH= '16 '   HEIGHT= '16 '> &nbsp; <INPUT   type= 'CheckBox '   ID= ' "+RsCatalog1.Tables[0].Rows   [i][ "ID "].ToString()+ " '   Text= ' "+RsCatalog1.Tables[0].Rows   [i][ "Name "].ToString()+ " '> &nbsp;&nbsp; "+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 ')
{
}
}

热点排行