C# Gridview使用SqlCommand更新,但编辑和删除不再工作
我有一个gridview(绑定到SQL Server数据库)、一个文本框和一个按钮 我可以删除或编辑gridview中的值。一切正常。不需要自己编写任何代码,默认情况下它是存在的 但是,在文本框中,我可以使用按钮输入一个值,以缩小gridview结果的范围 在按钮后面我有下面的代码。结果显示在gridview中。美好的不幸的是,从那时起,“删除”和“编辑”都不再起作用了。 我得到: GridView触发了未处理的事件行编辑 如果默认情况下不是必需的,为什么我要自己在C# Gridview使用SqlCommand更新,但编辑和删除不再工作,c#,asp.net,sql-server,gridview,C#,Asp.net,Sql Server,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与中间层业务对象一起工作,以声明方式选择、插入、更新、删除、分页、排序、缓存和过滤数据,而无需大量代码。”