private void delete(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
string strDel="delete from Document where id='"+e.Item.Cells[0].Text+"'";

sqlConn1.Open(); SqlCommand cmdDel=new SqlCommand();
cmdDel.CommandText=strDel;
cmdDel.Connection=sqlConn1;
cmdDel.ExecuteNonQuery(); sqlConn1.Close();
// sqlDA1.Update(dataSet11,"Document"); DataGrid1.DataSource=dataSet11.Tables["Document"];
DataGrid1.DataBind();
}
这是DataGrid按钮列的删除事件,为什么我运行时要对记录删除2次才会真正执行删除呢?第一次按下去页面刷新一下,但没执行删除,不明白是为什么。

解决方案 »

  1.   

    在page_load事件中绑定数据时没有放在IsPostBack中吧if(!IsPostBack)
    {
       GridBound();//绑定数据
    }
      

  2.   

    DataGrid1.DataSource=dataSet11.Tables["Document"];
    你这个table还是缓存中的table,没有刷新,要重新select出来才行的
      

  3.   

    首先设置断点,看你的第一次点击按钮是否执行了删除操作,其次不建议你用全局的dataset,还是用局部的dataset
      

  4.   

    确实是刷新的问题,第一次点击的时候就已经删除了,但还是显示的是dataSet里原来的表。可是为什么我重新select了,再fill dataSet还是没刷新呢?不太明白
    private void delete(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    string strDel="delete from Document where id='"+e.Item.Cells[0].Text+"'";

    sqlConn1.Open(); SqlCommand cmdDel=new SqlCommand();
    cmdDel.CommandText=strDel;
    cmdDel.Connection=sqlConn1;
    cmdDel.ExecuteNonQuery(); sqlDA1.SelectCommand.CommandText="select * from Document";
    sqlDA1.SelectCommand.Connection=sqlConn1;
    sqlDA1.Fill(dataSet11,"Document");
    sqlConn1.Close(); DataGrid1.DataSource=dataSet11.Tables["Document"];
    DataGrid1.DataBind();
    }
      

  5.   

    是不是我重新select时的语句有什么问题?
      

  6.   

    其次不建议你用全局的dataset,还是用局部的dataset
    ===
    改成局部的dataset
      

  7.   

    1、局部的DataSet是指在每个事件中用DataSet ds=new DataSet();的方式来建一个只供当前事件使用的DataSet?
    2、那我现在的这个问题能说一下怎么解决吗?我觉得问题挺清楚了,就是删除操作之后DataSet里的表没能更新的关系,有朋友说重新Select一下,我试了一下,但不知道那里不对,大家帮我看下吧。
    private void delete(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    string strDel="delete from Document where id='"+e.Item.Cells[0].Text+"'";

    sqlConn1.Open(); SqlCommand cmdDel=new SqlCommand();
    cmdDel.CommandText=strDel;
    cmdDel.Connection=sqlConn1;
    cmdDel.ExecuteNonQuery(); sqlDA1.SelectCommand.CommandText="select * from Document";
    sqlDA1.SelectCommand.Connection=sqlConn1;
    sqlDA1.Fill(dataSet11,"Document");
    sqlConn1.Close(); DataGrid1.DataSource=dataSet11.Tables["Document"];
    DataGrid1.DataBind();
    }
      

  8.   

    难道非要重新建一个连接,一个DataAdapter,一个DataSet才行吗?我重新建了,见得过程中发现点问题
    private void delete(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    string strDel="delete from Document where id='"+e.Item.Cells[0].Text+"'";

    sqlConn1.Open(); SqlCommand cmdDel=new SqlCommand();
    cmdDel.CommandText=strDel;
    cmdDel.Connection=sqlConn1;
    cmdDel.ExecuteNonQuery(); sqlConn1.Close(); string strConn="server=(local);database=shujuku;Trusted_Connection=yes;integrated security=true";;
    SqlConnection sqlConn2=new SqlConnection(strConn);
    sqlConn2.Open();
    DataSet ds=new DataSet();
    string strCmd="select * from Document";
    SqlDataAdapter sqlDA2=new SqlDataAdapter(strCmd,sqlConn2);
    // sqlDA2.SelectCommand.CommandText="select * from Document";
    // sqlDA2.SelectCommand.Connection=sqlConn2;
    sqlDA2.Fill(ds,"Document");
    sqlConn2.Close(); DataGrid1.DataSource=ds.Tables["Document"];
    DataGrid1.DataBind();
    }
    注意看//部分,这是灵活的创建方法呀,为什么用
    SqlDataAdapter sqlDA2=new SqlDataAdapter();
    sqlDA2.SelectCommand.CommandText="select * from Document";
    sqlDA2.SelectCommand.Connection=sqlConn2;
    就还是没把内容刷新,一定要用
    SqlDataAdapter sqlDA2=new SqlDataAdapter(strCmd,sqlConn2);呢?
      

  9.   

    在page_load事件中绑定数据时没有放在IsPostBack中吧if(!IsPostBack)
    {
       GridBound();//绑定数据
    }