【问题标题】:Delete button only deleted first row in gridview删除按钮仅删除了gridview中的第一行
【发布时间】:2017-02-22 08:14:12
【问题描述】:

我在 GridView 中添加了一个删除按钮。但问题是它总是删除第一行。

例如,如果我要删除第二行或第三行,则第一行中的数据将被删除。我只是想让按钮删除它旁边的行:

public void bindgrid()
{
    SqlConnection conn = new SqlConnection("cnString");
    SqlCommand cmd = new SqlCommand("select Id,Name, from myTable ", conn);
    SqlDataAdapter da = new SqlDataAdapter("", conn);
    da.SelectCommand = new SqlCommand("select Id,Name, from myTable", conn);
    DataSet ds = new DataSet();
    da.Fill(ds, "data");
    gridview1.DataSource = ds.Tables[0].DefaultView;
    gridview1.DataBind();
}


protected void gdview_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    int userid = int.Parse(gridview1.DataKeys[0].Value.ToString());
    SqlConnection conn = new SqlConnection("cnString");
    SqlDataAdapter da = new SqlDataAdapter("", conn);
    conn.Open();
    da.DeleteCommand = new SqlCommand("delete from myTable where Id=" + userid , conn);

    da.DeleteCommand.ExecuteNonQuery();
    conn.Close();
    bindgrid();
}

【问题讨论】:

  • 你需要获取你点击的行索引
  • 你应该寻找gridview的选定行,然后获取该行的ID,然后去删除部分。在我看来,你总是在抓取第一行的ID

标签: c# sql wpf gridview ado.net


【解决方案1】:

你应该传递当前行索引而不是gridview1.DataKeys[0]

 protected void gdview_RowDeleting(object sender, GridViewDeleteEventArgs e)
   {
    int userid = int.Parse(gridview1.DataKeys[e.RowIndex].Value.ToString());
    SqlConnection conn = new SqlConnection("cnString");
    SqlDataAdapter da = new SqlDataAdapter("", conn);
    conn.Open();
    da.DeleteCommand = new SqlCommand("delete from myTable where Id=" + userid , conn);

    da.DeleteCommand.ExecuteNonQuery();
    conn.Close();
    bindgrid();
   }

【讨论】:

  • 当我使用 e.rowIndex 时出现此错误:(CS1061:'System.Web.UI.WebControls.GridViewDeleteEventArgs' 不包含 'rowIndex' 的定义并且没有扩展方法 'rowIndex' 接受类型的第一个参数)
  • 它现在可以工作了,谢谢我只是使用 e.RowIndex 而不是 e.rowIndex 来避免错误
【解决方案2】:

问题在下面一行

int userid = int.Parse(gridview1.DataKeys[0].Value.ToString());

您总是使用 [0] 获取第一行的用户 ID

从 "e" 中获取适当的值并传递它。

e.RowIndex

【讨论】:

    【解决方案3】:

    类似的东西

    GridViewRow row = gridview1.Rows[e.RowIndex];
    int userid = int.Parse(row[0].Value.ToString());
    

    【讨论】:

      【解决方案4】:

      替换此行

      int userid = int.Parse(gridview1.DataKeys[0].Value.ToString());
      

      到这里

      int userid = int.Parse(gridview1.DataKeys[e.RowIndex].Value.ToString());
      

      【讨论】:

      • 我得到这个错误:('int.Parse(string)' 的最佳重载方法匹配有一些无效参数)
      猜你喜欢
      • 2019-04-06
      • 2018-03-20
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-13
      相关资源
      最近更新 更多