当前位置:编程学习 > C#/ASP.NET >>

急求

  我写的删除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();

                     }
--------------------编程问答-------------------- 正确的代码

注意: 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>
--------------------编程问答-------------------- CheckBox ck =this.DataList1.Items[i].FindControl("CheckBox1")as CheckBox;
 你去遍历多个是否处于选中的时候 用checkbox1 这样不行的吧 你的id都是checkbox1吗? --------------------编程问答-------------------- CheckBox ck =this.DataList1.Items[i].FindControl("CheckBox1")as CheckBox;
转换完 ck 为空 有可能没找到这个控件
加上 if(ck!=null)
    {
        //....    
    }
--------------------编程问答-------------------- 加上 if(ck!=null)
--------------------编程问答-------------------- 系统提示说是“if(ck.Checked)'这儿未将对象引用设置到对象的实例,就是指未找到ck.
在前面加上if(ck!=null)
并且不忘了load事件里面加
if (!Page.IsPostBack)
{
}
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,