你说的应该是WebForm里的DataGrid吧,如果是这样的话,你必须在DataGrid的DeleteCommand事件里把数据源的数据删除掉,然后从新绑定DataGrid

解决方案 »

  1.   

    注意你的Page_load事件:
    if(!IsPostBack)
    {
       //绑定数据
    }
      

  2.   

    确实是asp.net中。我不是自己写代码,而是用界面设计的.
    只写了fill的那句
    难道一定要写代码吗.
    写在哪里?
      

  3.   

    SqlConnection sqlConnection1 = new SqlConnection();
    sqlConnection1.ConnectionString = "user id=sa;data source=10.0.0.15;persist security info=True;initial catalog=202PEM;password=gaoshan"; SqlDataAdapter da=new SqlDataAdapter("select * from test",sqlConnection1);
    SqlCommandBuilder myBld = new SqlCommandBuilder (da);
    da.Update (ds);
      

  4.   

    sqlAdapter也创建了所有语句包括delete??1.数据集中的行你使用什么方法删除的?应该调用delete()方法将行标记为删除状态,然后调用SqlAdapter的update()方法,不能先调用acceptchanges(),再调用update()!也不能调用行集的remove和removeat方法,再调用update(),因为remove()方法等于先调delete(),再调用acceptchanges()!2.确保你的delete命令正确!
      

  5.   

    if(!IsPostBack)
    {
       //绑定数据
    }
      

  6.   

    我重复一下
    1 我是用vs.net界面设计的。自己只写了两行代码
    private void Page_Load(object sender, System.EventArgs e)
    {
    this.sqlDataAdapter1.Fill(this.dataSet21);
    this.DataGrid1.DataBind();
    }
    删除用的是一个删除按钮列
    2 看过数据库,数据根本没删掉
      

  7.   

    呵呵,你就只写两行代码,那肯定是不行的,必须在DataGrid的DeleteCommand事件中进行删除的处理,然后再绑定,而且这两行代码也不对
    private void Page_Load(object sender, System.EventArgs e)
    {
      if(!IsPostBack)
      {
        this.sqlDataAdapter1.Fill(this.dataSet21);
        this.DataGrid1.DataBind();
       }
    }
      

  8.   

    我看楼上好像都没写delete语句
      

  9.   

    private void dataGrid21_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
     //用(孤寂无边)的方法删除相应行,此略
    this.sqlDataAdapter1.Update(this.dataSet21);
    this.DataGrid1.DataBind();

    }
      

  10.   

    private void Page_Load(object sender, System.EventArgs e)
    {
      if(!IsPostBack)
      {
        this.sqlDataAdapter1.Fill(this.dataSet21);
        this.DataGrid1.DataBind();
       }
    }
    我已经加上了if(!IsPostBack)还是不行。
    DeleteCommand当然有了。 // 
    // sqlDeleteCommand1
    // 
    this.sqlDeleteCommand1.CommandText = @"DELETE FROM dbo.T_Question WHERE (question_ID = @Original_question_ID) AND (answer = @Original_answer OR @Original_answer IS NULL AND answer IS NULL) AND (question = @Original_question OR @Original_question IS NULL AND question IS NULL) AND (username = @Original_username OR @Original_username IS NULL AND username IS NULL)";
    this.sqlDeleteCommand1.Connection = this.sqlConnection1;
    this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_question_ID", System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "question_ID", System.Data.DataRowVersion.Original, null));
    this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_answer", System.Data.SqlDbType.NVarChar, 255, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "answer", System.Data.DataRowVersion.Original, null));
    this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_question", System.Data.SqlDbType.NVarChar, 255, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "question", System.Data.DataRowVersion.Original, null));
    this.sqlDeleteCommand1.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Original_username", System.Data.SqlDbType.NVarChar, 50, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "username", System.Data.DataRowVersion.Original, null));
    以上是窗体设计器生成的代码
      

  11.   

    <asp:ButtonColumn Text="删除" CommandName="Delete"></asp:ButtonColumn>
    这是用窗体设计器生成的删除按钮列,他应该会自动去调用delete。
    难道没人用过 删除按钮列 吗????
    我以前是可以的。很简单的。不知道怎么不行了
      

  12.   

    SqlDataAdapter的Delete语句是在遇到DataSet中的表的行状态(RowState)为Deleted时调用的语句,如果你没有把相应的行状态标记为Deleted的话,在调用Update方法时,他是不会调用这个Delete语句来删除数据源的相应行的
      

  13.   

    private void dataGrid21_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    }
    把你的这个事件处理里面的代码贴出来看看就知道了
      

  14.   

    根本没有dataGrid21_DeleteCommand这段代码。我硬写一段行吗。代码很简单只有一个page_load,其他都是自带的。
      

  15.   

    当浏览的时候 删除的链接是javascript:__doPostBack('DataGrid1$_ctl8$_ctl1',''),也确实post了。可是什么都没删除
      

  16.   

    你先点选DataGrid,然后在事件中找到DeleteCommand,双击这个事件,然后就可以写删除代码了
      

  17.   

    to:你先点选DataGrid,然后在事件中找到DeleteCommand,双击这个事件,然后就可以写删除代码了删除代码怎么写呢,
      

  18.   

    this.sqlDeleteCommand1.ExecuteNonQuery();试试
      

  19.   

    像这样的直接把数据库连结和处理写在页面里,不太好,一不方便维护,二有安全隐患,参考代码(我改了部分代码,可能有些语句不对):
    private void d_Assign_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    int keyID=Convert.ToInt32(d_Assign.DataKeys[(int)e.Item.ItemIndex].ToString());
    DataRow dr=ds.Tables[0].Find(keyID);
    dr.Delete();
    ds.AccepChanges();
    da.Update(ds);

    BindAssignGrid();

    }
      

  20.   

    谢谢hhqwolf(ukyo) ,我市一下。
    我用this.sqlDeleteCommand1.ExecuteNonQuery();试试
    提示我异常详细信息: System.Data.SqlClient.SqlException: 被准备语句 '(@Original_question_ID int,@Original_answer nvarchar(255),@Origi' 需要参数 @Original_question_ID,但未提供该参数。
    怎么设置参数阿
      

  21.   

    H:\netweb\WebForm1.aspx.cs(143): 找不到类型或命名空间名称“d_Assign”(是否缺少 using 指令或程序集引用?)H:\netweb\WebForm1.aspx.cs(144): “System.Data.DataTable”并不包含对“Find”的定义H:\netweb\WebForm1.aspx.cs(148): 名称“BindAssignGrid”在类或命名空间“netweb.WebForm1”中不存在
      

  22.   

    this.sqlDeleteCommand1.Parameters["Original_question_ID"].Value=2;试一下
      

  23.   

    to :
    this.sqlDeleteCommand1.Parameters["Original_question_ID"].Value=2;试一下异常详细信息: System.IndexOutOfRangeException: 此 SqlParameterCollection 中未包含带有 ParameterName“Original_question_ID”的 SqlParameter。
      

  24.   

    可以了this.sqlDeleteCommand1.Parameters[0].Value=2;可是
    this.sqlDeleteCommand1.Parameters["Original_question_ID"].Value=2;
    就不行。
    而且这里的2怎么换成指定的行阿。
      

  25.   

    可以换成this.sqlDeleteCommand1.Parameters["Original_question_ID"].Value=d_Assign.selectindex就可以了。
    如果还不好使,可以检查一下InitializeComponent()函数里面是不是没有添加d_Assign_DeleteCommand的代表,应该是this.d_Assign.DeleteCommand+= new System.EventHandler(this.d_Assign_DeleteCommand);
      

  26.   

    用this.sqlDeleteCommand1.Parameters["@Original_question_ID"].Value我笔误
      

  27.   

    真感谢,我看你的问题回想我正在做的项目里面是怎么做的时候发现了我删除事件有点错误,以前居然没发现,点击按钮后直接删除所有符合条件的记录,差点出事,还好改正了,谢谢啦搂主!我给你看我的删除的基本思路吧,改一改就可以用了
    private void d_Assign_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    int keyID=Convert.ToInt32(d_Assign.DataKeys[(int)e.Item.ItemIndex].ToString());
    SqlConnection conntemp;
    conntemp2=new SqlConnection(connStr); 
    SqlCommand cmdtemp;
    conntemp.Open();
    selectCmd="delete ASN_HEAD_WRK  where keyID='"+keyID+"'";
    cmdtemp.ExecuteNonQuery();
    conntemp.Close();BindAssignGrid();    }
      

  28.   

    可是我的这行
    int keyID=Convert.ToInt32(this.DataGrid1.DataKeys[(int)e.Item.ItemIndex].ToString());出错:异常详细信息: System.ArgumentOutOfRangeException: 索引超出范围。必须为非负值并小于集合大小。参数名: index怎么办啊,还有你们说的BindAssignGrid是不是自己写的方法,我这里没有啊
      

  29.   

    Response.Write(this.DataGrid1.DataKeys.Count.ToString());
    是0怎么回事啊?????
      

  30.   

    俊俊的对,要用SQL语句去删除,不要用C#的,它要删除两次,第一次是断开的数据库,只是做了一个标记符,必须把它返回到数据库再删除一次才行
      

  31.   

    datagrid要设置DataKeyField才能使用DataKeys[index]
      

  32.   

    o,知道了。
    为什么我用 hhqwolf(ukyo)的方法private void d_Assign_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
    {
    int keyID=Convert.ToInt32(d_Assign.DataKeys[(int) e.Item.ItemIndex].ToString());
    DataRow dr=ds.Tables[0].Find(keyID);
    dr.Delete();
    ds.AccepChanges();
    da.Update(ds);
    BindAssignGrid();
    }
    问什么dr.Delete();这行出错:
    异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
      

  33.   

    是这样的
    何不用普通的delete语法试试呢