先看一代码:
foreach(DataGridItem dgi in this.dg1.Items)//datagrid名为dg1
{
CheckBox cb4=new CheckBox();//说明:cb4是datagrid(现命名为dg1)模板列上的一个Checkbox
cb4=(CheckBox)dgi.Cells[0].FindControl("cb4");
if(cb4.Checked==true)
  {
string sql="insert into Notice(N_from,N_to,N_time,Notice) values('rr','ggg','"+DateTime.Now.ToString()+"','"+content.Text.Replace("'","''")+"')";
System.Data.SqlClient.SqlCommand cmd=new SqlCommand(sql,cn);
cmd.ExecuteNonQuery();
  }
}------------------------------
当只有下面这些代码时:
string sql="insert into Notice(N_from,N_to,N_time,Notice) values('rr','ggg','"+DateTime.Now.ToString()+"','"+content.Text.Replace("'","''")+"')";
System.Data.SqlClient.SqlCommand cmd=new SqlCommand(sql,cn);
cmd.ExecuteNonQuery();
插入数据库成功
----------------------
但当外加
foreach(DataGridItem dgi in this.dg1.Items)
{CheckBox cb4=new CheckBox();
cb4=(CheckBox)dgi.Cells[0].FindControl("cb4");
if(cb4.Checked==true)
时,就没执行insert语句,项目急,sos!!郁闷中、、、、、、、、、、、、、、、、、

解决方案 »

  1.   

    调试一下,cb4.Checked是什么?你初始是怎么绑定的,确认是在if (!Page.IsPostBack)
    {
      //...初始绑定
    }里
      

  2.   

    cb4.Checked结果是无条件,总中断
    好像就没执行到
      

  3.   

    是不是你的item循环了,但是你写入的值没有进行对应的循环赋值?
      

  4.   

    给全代码:
    public class putnotice : System.Web.UI.Page
    {
    protected System.Web.UI.WebControls.DataGrid dg;
    protected System.Web.UI.WebControls.TextBox content;
    protected System.Web.UI.WebControls.Button sendmessage;
    protected System.Web.UI.HtmlControls.HtmlTableCell TD1;
    protected System.Web.UI.WebControls.DataGrid dg1;
    System.Data.SqlClient.SqlConnection cn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectString"]);

    public void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    string a=Session["usernumber"].ToString();
    string b=Session["username"].ToString();
    string c=Session["Popedom"].ToString();

    BindGrid1();
    BindGrid2();


    if(c=="4")
    {
    validation("对不起,只有有权限的人才可以给别人发送消息!");
    }
    if(c=="3"||c=="1")
    {
    dg.Visible=false;
    dg1.Visible=true; }
    if(c=="2")
    {
    dg.Visible=true;
    dg1.Visible=false;
    }

         }
    void validation(string e)
    {
    Response.Write("<script>top.location.href='javascript:history.go(-1);'alert('"+e+"')</script>");
    }
    void success(string e)
    {
    Response.Write("<script>top.location.href='index.aspx';alert('"+e+"')</script>");
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {    
    this.dg1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.dg1_PageIndexChanged);
    this.sendmessage.Click += new System.EventHandler(this.sendmessage_Click);
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion private void sendmessage_Click(object sender, System.EventArgs e)
    {
    string c=Session["Popedom"].ToString();
    string a=Session["usernumber"].ToString();
    string b=Session["username"].ToString();
    cn.Open();
    if(c=="2")
    {
    foreach(DataGridItem dgi in this.dg.Items)
    {

    CheckBox cb2=new CheckBox();
    cb2=(CheckBox)dgi.Cells[0].FindControl("cb2");
    if(cb2.Checked==true)
    {
    string strSql="insert into Notice(N_from,N_to,N_time,Notice) values('"+b+"','"+dgi.Cells[2].Text+"','"+DateTime.Now.ToString()+"','"+content.Text.Replace("'","''")+"')";
    System.Data.SqlClient.SqlCommand cmd=new SqlCommand(strSql,cn);
    cmd.ExecuteNonQuery();
    }
    }

    }
    else if(c=="3")
    {
    foreach(DataGridItem dgi in this.dg1.Items)
    {
    if (!Page.IsPostBack)
    {
    CheckBox cb4=new CheckBox();
    cb4=(CheckBox)dgi.Cells[0].FindControl("cb4");
    if(cb4.Checked==true)
    {
    string sql="insert into Notice(N_from,N_to,N_time,Notice) values('rr','ggg','"+DateTime.Now.ToString()+"','"+content.Text.Replace("'","''")+"')";
    System.Data.SqlClient.SqlCommand cmd=new SqlCommand(sql,cn);
    cmd.ExecuteNonQuery();
    }
    } }
    }
    success("您的消息已经发送成功!!");
    cn.Close();

    } public void SelectAll(object sender, System.EventArgs e)
    {
    foreach(DataGridItem dgi in this.dg.Items)
    {

    CheckBox cb2=new CheckBox();
    cb2=(CheckBox)dgi.Cells[0].FindControl("cb2");
    cb2.Checked=((CheckBox)sender).Checked;
    }

    }
    public void SelectAll2(object sender, System.EventArgs e)
    {
    foreach(DataGridItem dgi in this.dg.Items)
    {

    CheckBox cb4=new CheckBox();
    cb4=(CheckBox)dgi.Cells[0].FindControl("cb4");
    cb4.Checked=((CheckBox)sender).Checked;
    }

    }
    private void BindGrid1()
    {
    string sql="select M_no,M_name from vw_iteminfo";
    System.Data.SqlClient.SqlDataAdapter da=new SqlDataAdapter(sql,cn);
    DataSet ds=new DataSet();
    da.Fill(ds);
    dg.DataSource=ds;
    dg.DataBind(); }
    private void BindGrid2()
    {
    string sql="select M_no,M_name from Member";
    System.Data.SqlClient.SqlDataAdapter da=new SqlDataAdapter(sql,cn);
    DataSet ds=new DataSet();
    da.Fill(ds);
    dg1.DataSource=ds;
    dg1.DataBind();
    } private void dg1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
    {
    dg1.CurrentPageIndex=e.NewPageIndex;
    BindGrid2();
    }
      

  5.   

    回复人: kernelj(From journeyman to master.) ( ) 信誉:100 
    是不是你的item循环了,但是你写入的值没有进行对应的循环赋值?
    ------------------------------------------------------------
    循环后一个也没能插入,如果没有下面这些:
    foreach(DataGridItem dgi in this.dg1.Items)
    {CheckBox cb4=new CheckBox();
    cb4=(CheckBox)dgi.Cells[0].FindControl("cb4");
    if(cb4.Checked==true)
    单纯的插入是完全可以的
      

  6.   

    吧page.load事件中代码放入public void Page_Load(object sender, System.EventArgs e)
    {if (!Page.IsPostBack)
    {
      这里来
    }

      

  7.   

    吧page.load事件中代码放入public void Page_Load(object sender, System.EventArgs e)
    {if (!Page.IsPostBack)
    {
      这里来
    }

    -------------------------------------
    我还得要循环insert的,放到Page_Load里,那么就没法在触发事件时,循环insert数据到数据库
      

  8.   

    吧page.load事件中代码放入public void Page_Load(object sender, System.EventArgs e)
    {if (!Page.IsPostBack)
    {
      这里来
    }
    』--------------------------
    照做了,没有解决问题
      

  9.   

    foreach(DataGridItem dgi in this.dg.Items)
    {

    CheckBox cb2=new CheckBox();
    cb2=(CheckBox)dgi.Cells[0].FindControl("cb2");
    if(cb2.Checked==true)
    {
    string strSql="insert into Notice(N_from,N_to,N_time,Notice) values('"+b+"','"+dgi.Cells[2].Text+"','"+DateTime.Now.ToString()+"','"+content.Text.Replace("'","''")+"')";
    System.Data.SqlClient.SqlCommand cmd=new SqlCommand(strSql,cn);
    cmd.ExecuteNonQuery();
    }
    }用Response.Write代替插入语句看看,是循环的问题,还是其他问题。
      

  10.   

    楼主理解错误了吧
    public void Page_Load(object sender, System.EventArgs e)
    {
    // 在此处放置用户代码以初始化页面
    string a=Session["usernumber"].ToString();
    string b=Session["username"].ToString();
    string c=Session["Popedom"].ToString();

    BindGrid1();
    BindGrid2();


    if(c=="4")
    {
    validation("对不起,只有有权限的人才可以给别人发送消息!");
    }
    if(c=="3"||c=="1")
    {
    dg.Visible=false;
    dg1.Visible=true; }
    if(c=="2")
    {
    dg.Visible=true;
    dg1.Visible=false;
    }

         }
    改为
    public void Page_Load(object sender, System.EventArgs e)
    {
                           if(!Page.IsPostback)
                            {
    // 在此处放置用户代码以初始化页面
    string a=Session["usernumber"].ToString();
    string b=Session["username"].ToString();
    string c=Session["Popedom"].ToString();

    BindGrid1();
    BindGrid2();


    if(c=="4")
    {
    validation("对不起,只有有权限的人才可以给别人发送消息!");
    }
    if(c=="3"||c=="1")
    {
    dg.Visible=false;
    dg1.Visible=true; }
    if(c=="2")
    {
    dg.Visible=true;
    dg1.Visible=false;
    }
                         }

         }
      

  11.   

    呵呵,楼主同志,你那样做是不行的,你还没有完全理解isPostBack的含义
    在.net中isPostBack个示非首次加载,即用户点击页面提交请求到服务器的结果,
    而直接在page_load里边加入BindGrid1();BindGrid2();两个绑定函数,就是说每当你点击页面一次那么页面重新加载时就会执行一次绑定,那么请问从新绑定过的数据后你的CB也就重新加载了,它选 了吗???明显没有选 啊,所以不执行了:然次方法,还是在改Page_Load中的东西
    奖你原来的改成:
    public void Page_Load(object sender, System.EventArgs e)
    {
                            // 在此处放置用户代码以初始化页面
    string a=Session["usernumber"].ToString();
    string b=Session["username"].ToString();
    string c=Session["Popedom"].ToString();
    if(!this.Page.IsPostBack)
                               {
    BindGrid1();
    BindGrid2();
                                }
    //就这地方,你每次点击就加载DataGrid了!

    if(c=="4")
    {
    validation("对不起,只有有权限的人才可以给别人发送消息!");
    }
    if(c=="3"||c=="1")
    {
    dg.Visible=false;
    dg1.Visible=true; }
    if(c=="2")
    {
    dg.Visible=true;
    dg1.Visible=false;
    }
                         
         }
      

  12.   

    非常感谢你们两位:
    yybb520(bbyy) 
    coley(唉~眼镜又厚了~) 
    ---------------------------
    不过新加个问题
    如何实现全先功能呢?
    public void SelectAll2(object sender, System.EventArgs e)
    {
    foreach(DataGridItem dgi in this.dg.Items)
    {

    CheckBox cb4=new CheckBox();
    cb4=(CheckBox)dgi.Cells[0].FindControl("cb4");
    cb4.Checked=((CheckBox)sender).Checked;
    }

    }
    用这个函数好像不行呀,郁闷又来了
      

  13.   

    可能是因为在第次触发事件提交之后,都会产生重新绑定,做得本来选中的dg1.item[].cell[0]中的CheckBox控件cb2重置为未选中,这样的话,在判断if(cb4.Checked==true)时不会产生任何效果
      

  14.   

    不过新加个问题
    如何实现全先功能呢?
    public void SelectAll2(object sender, System.EventArgs e)
    {
    foreach(DataGridItem dgi in this.dg.Items)
    {

    CheckBox cb4=new CheckBox();
    cb4=(CheckBox)dgi.Cells[0].FindControl("cb4");
    cb4.Checked=((CheckBox)sender).Checked;
    }

    }
    用这个函数好像不行呀,郁闷又来了
      

  15.   

    huangjietao(紫 龙) 
    如果要全选你可以在客户端使用脚本
    ----------------------------------
    但我的所有的checkbox都是作为模板列在datagrid上的,你说的好像不行
    请个给例子