我写的删除datalist中选中的多项checkbox的代码是下面的,系统提示说是“if(ck.Checked)'这儿未将对象引用设置到对象的实例,烦各位高手指教一下怎么修改啊?int[] arr=new int[100];
            for(int i = 0; i < DataList1.Items.Count; i++)
            {
               
                 CheckBox ck =this.DataList1.Items[i].FindControl("CheckBox1")as CheckBox;
                                    if (ck.Checked)
                     {
                         arr[i] = int.Parse((DataList1.Items[i].FindControl("Label2") as Label).Text);
                         string sql = "delete from selecting where id in (";
                         for (int j = 0; j < arr.Length; )
                         {
                             sql += "+j+" + ",";
                         }
                         sql = sql.Substring(0, sql.Length - 1);
                         sql += ")";                         SqlCommand com = new SqlCommand(sql, con);
                         com.ExecuteNonQuery();                     }

解决方案 »

  1.   

    正确的代码注意: if (!Page.IsPostBack) 
    注意:EnableViewState="true"<%@ 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)
      {
        if (!Page.IsPostBack)
        {
          System.Data.DataTable dt = new System.Data.DataTable();
          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)));
          dt.Columns.Add(new System.Data.DataColumn("Score", typeof(System.Double)));
          System.Random rd = new System.Random();
          for (int i = 1; i < 6; i++)
          {
            dr = dt.NewRow();
            dr[0] = i * i;
            dr[1] = "【孟子E章】" + i.ToString();
            dr[2] = System.Math.Ceiling(rd.NextDouble() * 100);
            dt.Rows.Add(dr);
          }
          System.Data.DataView dv = new System.Data.DataView(dt);
          DataList1.DataSource = dv;
          DataList1.DataBind();
        }
      }
      protected void Button1_Click(object sender, EventArgs e)
      {
        for (int i = 0; i < DataList1.Items.Count; i++)
        {      CheckBox ck = this.DataList1.Items[i].FindControl("CheckBox1") as CheckBox;
          if (ck.Checked)
          {
            Response.Write("<li> 选择了:" + (DataList1.Items[i].FindControl("Label2") as Label).Text);
          }
        }
      }
    </script><html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    </head>
    <body>
      <form id="form1" runat="server">
      <asp:DataList ID="DataList1" runat="server" CellPadding="0" CellSpacing="0">
        <ItemTemplate>
          <li>
            <asp:CheckBox ID="CheckBox1" runat="server" /><asp:Label ID="Label2" Text='<%#Eval("id") %>'
              runat="server"></asp:Label></li>
        </ItemTemplate>
      </asp:DataList>
      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
      </form>
    </body>
    </html>
      

  2.   

    CheckBox ck =this.DataList1.Items[i].FindControl("CheckBox1")as CheckBox;
     你去遍历多个是否处于选中的时候 用checkbox1 这样不行的吧 你的id都是checkbox1吗?
      

  3.   

    CheckBox ck =this.DataList1.Items[i].FindControl("CheckBox1")as CheckBox;
    转换完 ck 为空 有可能没找到这个控件
    加上 if(ck!=null)
        {
            //....    
        }
      

  4.   

    系统提示说是“if(ck.Checked)'这儿未将对象引用设置到对象的实例,就是指未找到ck.
    在前面加上if(ck!=null)
    并且不忘了load事件里面加
    if (!Page.IsPostBack)
    {
    }