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



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

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

然而,在文本框中,我可以用一个按钮来缩小我的gridview的结果。

按钮后面是下面的代码。结果显示在网格视图中。不错的…不幸的是,从那时起,"删除"one_answers"编辑"都不再工作了。我得到:

GridView触发未处理的RowEditing事件

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

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的输入。我发现了问题所在,以及如何解决。

而不是改变DataSourceID,我保留了它,但改变了选择命令按钮点击。然后我将它添加到视图状态

在新的page_load上,我从视图状态中获取新的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"];
    }
}

最新更新