【发布时间】: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