【问题标题】:Gridview is updated with SqlCommand but then edit and delete are no longer workingGridview 已使用 SqlCommand 更新,但随后编辑和删除不再起作用
【发布时间】:2015-09-24 19:17:02
【问题描述】:

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

我可以删除或编辑网格视图中的值。一切正常。不用自己写代码,默认就在那儿。

但是,我可以在文本框中输入一个带有按钮的值来缩小我的 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();

感谢您的帮助。

菲利普

【问题讨论】:

  • SQL Injection alert - 您应该将您的 SQL 语句连接在一起 - 使用 参数化查询 来避免 SQL 注入
  • 您最初是通过DataSourceID 将您的GridView 绑定到某种ObjectDataSource 吗?如果是这样,它们通常是为处理编辑和删除之类的事情而构建的,因此不一定需要您自己处理这些事件。当您像上面的代码一样通过设置DataSource 进行绑定时,您不会得到那种奢侈。
  • @marc_s,关于 SQL 注入,您是对的。会照顾的。谢谢。
  • @j.f.我的 gridview 是这样绑定的: 而 SqlDataSource1 看起来像:
  • 那是有道理的。我看不到您的整个实现,但由于您使用的是ObjectDataSource,我猜您的架构与此ObjectDataSource 一起为您处理这些事件。来自我之前评论中的 MSDN 链接:“(通常)ObjectDataSource 与中间层业务对象一起使用,以声明方式选择、插入、更新、删除、分页、排序、缓存和过滤数据,而无需大量代码。”

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


【解决方案1】:

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

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

在新的 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"];
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 2010-09-06
    相关资源
    最近更新 更多