C# Gridview使用SqlCommand更新,但编辑和删除不再工作

C# Gridview使用SqlCommand更新,但编辑和删除不再工作,c#,asp.net,sql-server,gridview,C#,Asp.net,Sql Server,Gridview,我有一个gridview(绑定到SQL Server数据库)、一个文本框和一个按钮 我可以删除或编辑gridview中的值。一切正常。不需要自己编写任何代码,默认情况下它是存在的 但是,在文本框中,我可以使用按钮输入一个值,以缩小gridview结果的范围 在按钮后面我有下面的代码。结果显示在gridview中。美好的不幸的是,从那时起,“删除”和“编辑”都不再起作用了。 我得到: GridView触发了未处理的事件行编辑 如果默认情况下不是必需的,为什么我要自己在行编辑事件中编写代码?我做错了

我有一个gridview(绑定到SQL Server数据库)、一个文本框和一个按钮

我可以删除或编辑gridview中的值。一切正常。不需要自己编写任何代码,默认情况下它是存在的

但是,在文本框中,我可以使用按钮输入一个值,以缩小gridview结果的范围

在按钮后面我有下面的代码。结果显示在gridview中。美好的不幸的是,从那时起,“删除”和“编辑”都不再起作用了。 我得到:

GridView触发了未处理的事件行编辑

如果默认情况下不是必需的,为什么我要自己在
行编辑
事件中编写代码?我做错了什么

SqlCommand cmd = new SqlCommand("select * from [DbPeople].[Info] WHERE username like '" + TxtUsername.Text + "%'", conn);
conn.Open();

cmd.ExecuteNonQuery();

SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;

DataSet ds = new DataSet();
da.Fill(ds, "info");

GridView1.DataSourceID = null;
GridView1.DataSource = ds;
GridView1.DataBind();
谢谢你的帮助


菲利普

多亏了@j.f.的投入,我发现了哪里出了问题,以及如何解决问题

我没有更改
数据源ID
,而是保留了它,但在单击按钮时更改了SelectCommand。然后我将其添加到视图状态中

在新的页面加载时,我从viewstate中获取新的SQL语句。 那很好!不必为编辑或删除编写任何代码

protected void Button1_Click(object sender, EventArgs e)
{
    // I don't use this anymore :

    //            GridView1.DataSourceID = null;
    //            GridView1.DataSource = ds;
    ...
    // now I do this :

    // New query string to narrow down the selection based on the input
    string sSQL = "select ...";
    SqlDataSource1.SelectCommand = sSQL;
    ViewState.Add("MySQL", sSQL);
}

protected void Page_Load(object sender, EventArgs e)
{
    LblResult.Text = "";
    if (!Page.IsPostBack)
    {
        GridView1.DataBind();
    }
    if (ViewState["MySQL"] != null)
    {
        SqlDataSource1.SelectCommand = (string)ViewState["MySQL"];
    }
}

-您不应该将SQL语句连接在一起-而是使用参数化查询来避免SQL注入。您最初通过
数据源ID将GridView绑定到某种类型的SQL语句?如果是这样的话,这些事件通常是为了处理诸如编辑和删除之类的事情而构建的,因此不一定需要您自己处理这些事件。当您通过像上面代码中那样设置
数据源进行绑定时,您不会得到那种奢侈的待遇。@marc\s,SQL注入是正确的。我会处理的。Thx.@j.f.我的gridview是这样绑定的:SqlDataSource1看起来是这样的:那就有意义了。我看不到您的整个实现,但由于您使用的是
ObjectDataSource
,我猜您的体系结构与
ObjectDataSource
一起为您处理这些事件。在我之前的评论中的MSDN链接中:“ObjectDataSource与中间层业务对象一起工作,以声明方式选择、插入、更新、删除、分页、排序、缓存和过滤数据,而无需大量代码。”