关于Repeater中的checkbox遍历问题

时间:2021-12-06 03:15:03
前台绑定

<asp:Repeater ID="Repeater1" runat="server">
    <HeaderTemplate>
<table width="100%" border="0" cellspacing="0" cellpadding="0" id="listTable">
  <tr class="listTitleStyle">
    <td width="12%" align="center">登陆帐号</td>
    <td width="11%" align="center">用户名称</td>
    <td width="18%" align="center">开始日期</td>
                        <td width="18%" align="center">到期日期</td>
                        <td width="17%" align="center">开户时间</td>
    <td width="10%" align="center">帐号状态</td>
    <td width="15%" align="center"> 属性<input type="checkbox" id="ckDete"   name="define_checkbox2" value="checkbox" onclick="javascript: return selectAll(this.form,this.checked)"/></td>
  </tr>
  </HeaderTemplate>    
  <ItemTemplate>
  <%#((DataRowView)Container.DataItem)["Colum"]%>
  </ItemTemplate>
  
  <FooterTemplate>
                          
  <tr class="listBodyStyle">
    <td height="23" colspan="7" background="Image/listBottomBg.jpg">&nbsp;</td>
      </tr>
  
  </table>
  </FooterTemplate>
  </asp:Repeater> 

后台绑定

   private void RepeaterUserListDataBind()
    {
        DataTable dt = UserInformManager.GetList(SearchTerms).Tables[0];
        if (dt != null)
        {
            dt.Columns.Add("Colum", typeof(string));
            dt.Columns.Add("Operate", typeof(string));
            foreach (DataRow dr in dt.Rows)
            {
                string str = null;
                dr["Operate"] = "<a href=\"AddUser.aspx?action=modify&softType=" + dr["SoftType"] + "&ID=" + dr["UID"] + "\"><img src=\"Image/update.jpg\" width=\"34\" height=\"21\" /></a><a href=\"UserList.aspx?action=Delete&ID=" + dr["UID"] + "\" onclick=\"return confirm('确定删除吗? 数据一旦删除将无法恢复!!');\"><img src=\"Image/delete.jpg\" width=\"34\" height=\"21\" /></a><input type=\"checkbox\" name=\"define_checkbox\" value=\"" + dr["UID"] + "\" />";
                str += "<tr class=\"listBodyStyle\">";
                str += "<td height=\"23\">" + dr["LoginID"] + "</td>";
                str += "<td height=\"23\">" + dr["UName"] + "</td>";
                str += "<td height=\"23\" align=\"center\">" + dr["SDate"] + "</td>";
                str += "<td height=\"23\" align=\"center\">" + dr["EDate"] + "</td>";
                str += "<td height=\"23\" align=\"center\">" + dr["AccDate"].ToString() + "</td>";
                str += "<td height=\"23\" align=\"center\">" + dr["State"].ToString() + "</td>";
                str += "<td height=\"23\" align=\"center\">" + dr["Operate"].ToString() + "</td></tr>";
                dr["Colum"] = str;
            }

            this.AspNetPager1.RecordCount = dt.Rows.Count;
            PagedDataSource pds = new PagedDataSource();
            pds.AllowPaging = true;
            pds.PageSize = this.AspNetPager1.PageSize;
            pds.CurrentPageIndex = this.AspNetPager1.CurrentPageIndex - 1;
            pds.DataSource = dt.DefaultView;
            this.Repeater1.DataSource = pds;
            this.Repeater1.DataBind();
        }
    }


我现在想遍历删除所有选中的数据项
怎么弄
怎么去获取每行的checkbox

21 个解决方案

#1


        function selectAll(obj){
            $(obj).parents("tr").siblings().each(function(){
                $(this).find(":checkbox").attr("checked",$(obj).attr("checked"))
            })
        }

#2


<asp:CheckBox ID="CheckBox1" onclick="selectAll(this)" runat="server" />选择

#3


foreach (RepeaterItem RPItem in this.Repeater1.Items)
{
CheckBox ChB = (CheckBox)RPItem.FindControl("CheckBoxID");
  if (!ChB.Checked)
 {
    ChB.Checked = true;
 }
 else
 {
    ChB.Checked = false;
 }
}

#4


如果是全选,就用前台脚本,如果是取值,就用后台遍历

#5


引用 3 楼 shine_fly 的回复:
C# code
foreach (RepeaterItem RPItem in this.Repeater1.Items)
{
CheckBox ChB = (CheckBox)RPItem.FindControl("CheckBoxID");
  if (!ChB.Checked)
 {
    ChB.Checked = true;
 }
 else
 {
    ChB.Checked ……

这个就可以,我以前用过

#6


引用 3 楼 shine_fly 的回复:
C# code
foreach (RepeaterItem RPItem in this.Repeater1.Items)
{
CheckBox ChB = (CheckBox)RPItem.FindControl("CheckBoxID");
  if (!ChB.Checked)
 {
    ChB.Checked = true;
 }
 else
 {
    ChB.……


靠谱!

#7


js 脚本 来实现

#8


引用 3 楼 shine_fly 的回复:
C# code

foreach (RepeaterItem RPItem in this.Repeater1.Items)
{
CheckBox ChB = (CheckBox)RPItem.FindControl("CheckBoxID");
  if (!ChB.Checked)
 {
    ChB.Checked = true;
 }
 else
 {
    Ch……

哥哥 你麻烦看仔细点 这种方式遍历我试过了 是不行的 你关键看仔细点 这个Repeater1的绑定方式
我试过好多方式 都不能在后台遍历获取每一行的checkbox

#9


我恳请进来回帖的兄弟姐们们 大家仔细看清楚题 看清楚要做什么 别随便会就回答。。。。

#10


哦,是动态的,呵呵 不好意思。
那就用1楼的吧,就是那个思路,find和抓取Repeater的checkbox。

#11


该回复于2011-09-20 13:26:11被版主删除

#12


用脚本吧
实用

#13


该回复于2011-09-20 13:26:10被版主删除

#14


function IsChecked(inst) {
         var num = 0;
         var id = [];
         var idsum = "";
         var items = document.getElementById("xx").getElementsByTagName("input");
         for (var i = 0; i < items.length; i++) {
             if (items[i].type == 'checkbox') {
                 if (items[i].checked) {
                     id[i] = parseInt(items[i].parentNode.title);
                     idsum += items[i].parentNode.title + ",";
                     num++;
                 }
             }
         }
         if (num == 0) {
              alert("Bull");
         }
         else {
             alert("Fuck");
         }
     }
 

1楼的是Jquery,上面也有cs后台的,我再给你个JS的,Jquery和JS的自己选用哪个。

#15


根据<input type=\"checkbox\"  name=\"define_checkbox\" value=\"" + dr["UID"] + "\" />
先取得选中的UID序列,然后删除
string checkeds = Request.Form.Get("define_checkbox");
if(!string.IsNullOrEmpty(checkeds))
//以下假设UID在数据库中是INT型
//如果UID不是INT,拼SQL前先转换一下
//checkeds = string.Join(",", checkeds.Split(',').Select(s => string.Concat("'", s, "'")).ToArray());  
    if(dal.Delete(string.Format("delete from users where UID in({0})", checkeds)))
          DataBind(); //重新绑定以刷新数据


当然用Ajax体验会更好,要写点JS

#16


14 楼的正解,用Jquery实现,
 function DelMany() {                         //批量删除
            var list = "";
            var checklist = jQuery("input[type=checkbox][name=define_checkbox2]:checked");
            if (checklist.length == 0) {
                alert("请选择要删除的数据!");
                return;
            }
            var flag = true;
            checklist.each(function(index, dom) {
                list += dom.value + ",";
            });
            if (confirm("确定要删除选中的新闻吗?")) {
                list = list.substr(0, list.length - 1);
                jQuery.ajax({
                    type: "POST",
                    url: "GonggaoList.aspx?callback=2&ids=" + list,
                    success: function(msg) {
                        if (msg == "1") {
                            jQuery("#tblist").find("input[name='ckbox'][checked=true]").parent().parent().remove();
                            alert("删除成功!");
                        }
                        else {
                            alert("删除失败!");
                        }
                    },
                    error: function(xhr) { alert("删除失败!"); }
                });
            }
        }

将所有选中的checkbox 对应的数据ID 拼接成字符串,传到后台进行处理。就是在后台用string.split(','),对所有ID遍历,从数据库中删除。删除成功,返回1或true,反之返回0或false,在前台接收,若为1,则通过这句:jQuery("#tblist").find("input[name='ckbox'][checked=true]").parent().parent().remove(); 移除掉所有选中行。这样可以实现无刷新批量删除。当然,上面代码中的一些HTML控件值(如 name)你得自己改一下,还有
jQuery("#tblist").find("input[name='ckbox'][checked=true]").parent().parent().remove(); 这句中的子父级关系得弄清楚。在你的页面里可能会少一个 .parent(),或多一个。

#17


该回复于2011-09-20 13:26:08被版主删除

#18


<script type="text/javascript">
        function selectAll() {
            // 获得用户页面中的所有的 输入功能的控件getElementById("ChkSelect").
            var checkbox = document.getElementsByTagName("input");
            if (checkbox[0].checked == true) {
                for (var i = 0; i < checkbox.length; i++)
                    checkbox[i].checked = false;
            }
            else {
                for (var i = 0; i < checkbox.length; i++)
                    checkbox[i].checked = true;
            }
        }

    </script>

 <HeaderTemplate>
        <input id="Checkbox1" type="checkbox" onclick='selectAll()' /></HeaderTemplate> 

<ItemTemplate>
        <tr>
            <td >  <asp:CheckBox id='ChkSelect'  AutoPostBack="true" runat="server"  onclick='selectAll()'  Text='<%#Eval("ID")%>' ></td>
  </ItemTemplate>   
 protected void Button1_Click(object sender, EventArgs e)
    {
        string s = "";
        for (int i = 0; i < this.Repeater1.Items.Count; i++)
        {
            //客户端
           CheckBox chb = (CheckBox)this.Repeater1.Items[i].FindControl("ChkSelect");
            if (chb.Checked == true)
            { 
                s = s + chb.Text;//chb.Text //服务器端
            }
        }
        Response.Write(s);
        
    }

#19


你的把每行的ID提出来,放在每行的一个位置上,这样删除才知道删除什么数据

#20


飘过。。。

#21


function SetCheck(count,cbID,cblID) {
            var checkbox = document.getElementById(cbID);
            
            var bValue = 0;
            for (var i = 0; i < count; i++) {
                var cblItem = document.getElementById(cblID + "_" + i);
                if (cblItem.type == "checkbox") {
                    if (cblItem.checked) {
                        bValue++;
                    }
                }
            }
            if (bValue > 0) {
                checkbox.checked = true;
            }
            else {
                checkbox.checked = false;
            }
        }

后台绑定数据时添加onclick事件,调用SetCheck方法设置,此为遍历设置选中状态

#1


        function selectAll(obj){
            $(obj).parents("tr").siblings().each(function(){
                $(this).find(":checkbox").attr("checked",$(obj).attr("checked"))
            })
        }

#2


<asp:CheckBox ID="CheckBox1" onclick="selectAll(this)" runat="server" />选择

#3


foreach (RepeaterItem RPItem in this.Repeater1.Items)
{
CheckBox ChB = (CheckBox)RPItem.FindControl("CheckBoxID");
  if (!ChB.Checked)
 {
    ChB.Checked = true;
 }
 else
 {
    ChB.Checked = false;
 }
}

#4


如果是全选,就用前台脚本,如果是取值,就用后台遍历

#5


引用 3 楼 shine_fly 的回复:
C# code
foreach (RepeaterItem RPItem in this.Repeater1.Items)
{
CheckBox ChB = (CheckBox)RPItem.FindControl("CheckBoxID");
  if (!ChB.Checked)
 {
    ChB.Checked = true;
 }
 else
 {
    ChB.Checked ……

这个就可以,我以前用过

#6


引用 3 楼 shine_fly 的回复:
C# code
foreach (RepeaterItem RPItem in this.Repeater1.Items)
{
CheckBox ChB = (CheckBox)RPItem.FindControl("CheckBoxID");
  if (!ChB.Checked)
 {
    ChB.Checked = true;
 }
 else
 {
    ChB.……


靠谱!

#7


js 脚本 来实现

#8


引用 3 楼 shine_fly 的回复:
C# code

foreach (RepeaterItem RPItem in this.Repeater1.Items)
{
CheckBox ChB = (CheckBox)RPItem.FindControl("CheckBoxID");
  if (!ChB.Checked)
 {
    ChB.Checked = true;
 }
 else
 {
    Ch……

哥哥 你麻烦看仔细点 这种方式遍历我试过了 是不行的 你关键看仔细点 这个Repeater1的绑定方式
我试过好多方式 都不能在后台遍历获取每一行的checkbox

#9


我恳请进来回帖的兄弟姐们们 大家仔细看清楚题 看清楚要做什么 别随便会就回答。。。。

#10


哦,是动态的,呵呵 不好意思。
那就用1楼的吧,就是那个思路,find和抓取Repeater的checkbox。

#11


该回复于2011-09-20 13:26:11被版主删除

#12


用脚本吧
实用

#13


该回复于2011-09-20 13:26:10被版主删除

#14


function IsChecked(inst) {
         var num = 0;
         var id = [];
         var idsum = "";
         var items = document.getElementById("xx").getElementsByTagName("input");
         for (var i = 0; i < items.length; i++) {
             if (items[i].type == 'checkbox') {
                 if (items[i].checked) {
                     id[i] = parseInt(items[i].parentNode.title);
                     idsum += items[i].parentNode.title + ",";
                     num++;
                 }
             }
         }
         if (num == 0) {
              alert("Bull");
         }
         else {
             alert("Fuck");
         }
     }
 

1楼的是Jquery,上面也有cs后台的,我再给你个JS的,Jquery和JS的自己选用哪个。

#15


根据<input type=\"checkbox\"  name=\"define_checkbox\" value=\"" + dr["UID"] + "\" />
先取得选中的UID序列,然后删除
string checkeds = Request.Form.Get("define_checkbox");
if(!string.IsNullOrEmpty(checkeds))
//以下假设UID在数据库中是INT型
//如果UID不是INT,拼SQL前先转换一下
//checkeds = string.Join(",", checkeds.Split(',').Select(s => string.Concat("'", s, "'")).ToArray());  
    if(dal.Delete(string.Format("delete from users where UID in({0})", checkeds)))
          DataBind(); //重新绑定以刷新数据


当然用Ajax体验会更好,要写点JS

#16


14 楼的正解,用Jquery实现,
 function DelMany() {                         //批量删除
            var list = "";
            var checklist = jQuery("input[type=checkbox][name=define_checkbox2]:checked");
            if (checklist.length == 0) {
                alert("请选择要删除的数据!");
                return;
            }
            var flag = true;
            checklist.each(function(index, dom) {
                list += dom.value + ",";
            });
            if (confirm("确定要删除选中的新闻吗?")) {
                list = list.substr(0, list.length - 1);
                jQuery.ajax({
                    type: "POST",
                    url: "GonggaoList.aspx?callback=2&ids=" + list,
                    success: function(msg) {
                        if (msg == "1") {
                            jQuery("#tblist").find("input[name='ckbox'][checked=true]").parent().parent().remove();
                            alert("删除成功!");
                        }
                        else {
                            alert("删除失败!");
                        }
                    },
                    error: function(xhr) { alert("删除失败!"); }
                });
            }
        }

将所有选中的checkbox 对应的数据ID 拼接成字符串,传到后台进行处理。就是在后台用string.split(','),对所有ID遍历,从数据库中删除。删除成功,返回1或true,反之返回0或false,在前台接收,若为1,则通过这句:jQuery("#tblist").find("input[name='ckbox'][checked=true]").parent().parent().remove(); 移除掉所有选中行。这样可以实现无刷新批量删除。当然,上面代码中的一些HTML控件值(如 name)你得自己改一下,还有
jQuery("#tblist").find("input[name='ckbox'][checked=true]").parent().parent().remove(); 这句中的子父级关系得弄清楚。在你的页面里可能会少一个 .parent(),或多一个。

#17


该回复于2011-09-20 13:26:08被版主删除

#18


<script type="text/javascript">
        function selectAll() {
            // 获得用户页面中的所有的 输入功能的控件getElementById("ChkSelect").
            var checkbox = document.getElementsByTagName("input");
            if (checkbox[0].checked == true) {
                for (var i = 0; i < checkbox.length; i++)
                    checkbox[i].checked = false;
            }
            else {
                for (var i = 0; i < checkbox.length; i++)
                    checkbox[i].checked = true;
            }
        }

    </script>

 <HeaderTemplate>
        <input id="Checkbox1" type="checkbox" onclick='selectAll()' /></HeaderTemplate> 

<ItemTemplate>
        <tr>
            <td >  <asp:CheckBox id='ChkSelect'  AutoPostBack="true" runat="server"  onclick='selectAll()'  Text='<%#Eval("ID")%>' ></td>
  </ItemTemplate>   
 protected void Button1_Click(object sender, EventArgs e)
    {
        string s = "";
        for (int i = 0; i < this.Repeater1.Items.Count; i++)
        {
            //客户端
           CheckBox chb = (CheckBox)this.Repeater1.Items[i].FindControl("ChkSelect");
            if (chb.Checked == true)
            { 
                s = s + chb.Text;//chb.Text //服务器端
            }
        }
        Response.Write(s);
        
    }

#19


你的把每行的ID提出来,放在每行的一个位置上,这样删除才知道删除什么数据

#20


飘过。。。

#21


function SetCheck(count,cbID,cblID) {
            var checkbox = document.getElementById(cbID);
            
            var bValue = 0;
            for (var i = 0; i < count; i++) {
                var cblItem = document.getElementById(cblID + "_" + i);
                if (cblItem.type == "checkbox") {
                    if (cblItem.checked) {
                        bValue++;
                    }
                }
            }
            if (bValue > 0) {
                checkbox.checked = true;
            }
            else {
                checkbox.checked = false;
            }
        }

后台绑定数据时添加onclick事件,调用SetCheck方法设置,此为遍历设置选中状态