读书人

repeater里checkbox值有关问题

发布时间: 2012-06-13 12:30:18 作者: rapoo

repeater里checkbox值问题
repeater用checkbox全选,repeater外的LinkButton执行删除,代码如下:[code=C#][/code] /// <summary>
///批量删除
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void lbtnDel_Click(object sender, EventArgs e)
{
for (int i = 0; i < this.rptList.Items.Count; i++)
{
CheckBox cb = (CheckBox)rptList.Items[i].FindControl("cb_id");
int id = Convert.ToInt32(((Label)rptList.Items[i].FindControl("lb_id")).Text);

if (cb.Checked)
{

string str = "delete from T_News where Nid=" + id;
DbHelper.NoResultCommand(str);
}

else
{
Response.Write("没有选中文本");
}
}
PageCountBind(1, drNewsCatList.SelectedValue);
}
执行删除事件之后,发现删除不了,直接进else语句
调试发现:checkbox的值一直是false,i,id可以循环到值
进一步调试发现,当执行删除事件之前都要先执行pageload里的事件,但是pageload里面已经!IsPostBack了

求指教

[解决办法]
初步估计 你在执行删除事件时又重新将repeater 初始化了,那样checkbox 很可能复原了
[解决办法]
是你代码没写好,js也是可以的

HTML code
<%@ Page Language="C#" EnableViewState="true" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server">  protected void Page_Load(object sender, EventArgs e)  {    xx.InputAttributes.Add("onclick", "SelectAll(this)");    System.Data.DataTable dt = new System.Data.DataTable();    if (!Page.IsPostBack)    {      System.Data.DataRow dr;      dt.Columns.Add(new System.Data.DataColumn("Id", typeof(System.Int32)));      dt.Columns.Add(new System.Data.DataColumn("Name", typeof(System.String)));      for (int i = 0; i < 6; i++)      {        dr = dt.NewRow();        dr[0] = i;        dr[1] = "【孟子E章】" + i.ToString();        dt.Rows.Add(dr);      }      rptList.DataSource = dt;      rptList.DataBind();    }  }  protected void LinkButton1_Click(object sender, EventArgs e)  {    bool hasChecked = false;    for (int i = 0; i < this.rptList.Items.Count; i++)    {      CheckBox cb = (CheckBox)rptList.Items[i].FindControl("cb_id");      int id = Convert.ToInt32(((Label)rptList.Items[i].FindControl("lb_id")).Text);      if (cb.Checked)      {        Response.Write("<li> delete from T_News where Nid=" + id);        hasChecked = true;        //DbHelper.NoResultCommand(str);      }    }    if (!hasChecked)    {      Response.Write("没有选中文本");    }    else    {      //Response.Redirect(Request.UrlReferrer.ToString());    }  }</script><script type="text/javascript">  function SelectAll(chkBox) {    s = document.getElementsByTagName("input");    for (i = 0; i < s.length; i++) {      if (s[i].type == "checkbox" && s[i].id && s[i].id.indexOf("cb_id") > -1) {        s[i].checked = chkBox.checked;      }    }  }</script><body>  <form id="form1" runat="server">  <asp:Repeater ID="rptList" runat="server">    <ItemTemplate>      <div>        <asp:CheckBox ID="cb_id" runat="server" /><asp:Label ID="lb_id" runat="server" Text='<%#Eval("Id") %>'></asp:Label>        <%#Eval("Name") %></div>    </ItemTemplate>  </asp:Repeater>  <asp:CheckBox ID="xx" runat="server" Text="全选" />  <asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click">删除</asp:LinkButton>  </form></body> 

读书人网 >asp.net

热点推荐