Gridview使用SqlCommand更新,但编辑和删除不再有效

时间:2015-09-24 19:17:03

标签: c# asp.net sql-server gridview

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

我可以删除或编辑gridview中的值。一切正常。不需要自己输入任何代码,默认情况下就是这样。

但是在文本框中我可以使用按钮放置一个值来缩小gridview的结果范围。

在按钮后面我有以下代码。结果显示在gridview中。很好......不幸的是,当时“删除”和“编辑”工作了。 我明白了:

  

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();

感谢您的帮助。

菲利普

1 个答案:

答案 0 :(得分:1)

感谢@ j.f的输入。我发现了什么问题以及如何解决它。

我没有更改DataSourceID,而是保留了它,但更改了按钮点击时的SelectCommand 。然后我将其添加到 viewstate

在新的page_load上,我从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"];
    }
}