我在同一页面上有一个SqlDataSource,一个Gridview和一个DropDownList.DropDownList的选择与一组相关联的SelectCommands,UpdateCommands以及DeleteCommands这样我可以利用在GridView AutoGenerateEditButton属性="真"和AutoGenerateUpdateButton ="真"的机制.
Page_Load
{
switch(ddl.SelectedItem.Text)
{
case "A":
sqlDS.SelectCommand = "Select * From A";
sqlDS.UpdateCommand = "Update A Set Name = @Name WHERE ID = @ID";
sqlDS.DeleteCommand = "Delete A WHERE ID = @ID";
break;
...
}
sqlDS.DataBind();
grd.DataSourceID = sqlDS.ID;
grd.DataBind();
}
Run Code Online (Sandbox Code Playgroud)
我需要如何或在什么时候添加参数?它是自动的吗?我基本上只是希望能够更新和删除表中的列.我想在实际的.cs文件中完成所有这些操作,而不是在.aspx文件中,因为我希望最终使它更具动态性; 但是现在我只想把基础知识搞定.我怀疑我可能在不适当的事件中有DataBind()逻辑,因为我不完全理解与数据绑定相关的事件的顺序.
查询并不复杂,不涉及连接或视图; 它们是单个表上的简单SELECT.
mel*_*okb 10
编辑:看起来如果你在GridView上使用AutoGenerateColumns ="true"并通过SqlDataSource填充,它会自动将控件的值按名称绑定到SQL查询中的相应参数,而不需要任何额外的代码.但是,我们必须使用GetInsertCommand(true)等等,以便命令使用列名称(请参阅下面的代码,我将展示如何使用SqlCommandBuilder.有一些问题,但正如我在测试中发现的那样:
DataKeyNamesGridViewOldValuesParameterFormatString="Original_{0}"你的sqlDS.scb.ConflictOption = System.Data.ConflictOption.OverwriteChanges;使用SqlCommandBuilder.但是,如果你需要定制,该SqlDataSource控件提供的事件Inserting,Updating,Deleting你可以用它来填充参数所采取的数据库之前,SQL操作:
sqlDS.Updating += new SqlDataSourceCommandEventHandler(sqlDS_Updating);
protected void sqlDS_Updating(object sender, SqlDataSourceCommandEventArgs e)
{
e.Command.Parameters["@Name"].Value = // retrieve value from user entry
}
Run Code Online (Sandbox Code Playgroud)
通过访问可以在Inserting和Deleting事件中完成同样的事情e.Command.Parameters[...].
请注意,您还可以使用SqlCommandBuilder类自动生成相应的"删除/插入/更新"命令,这样您就不必构建包含所有表的巨型switch语句.这是一个例子:
string tableName = ddl.SelectedValue;
string connectionString = ConfigurationManager
.ConnectionStrings["MyConnectionString"].ConnectionString;
string select = "SELECT * FROM [" + tableName + "]";
SqlDataAdapter sda = new SqlDataAdapter(select, connection);
SqlCommandBuilder scb = new SqlCommandBuilder(sda);
sqlDS.SelectCommand = select;
sqlDS.InsertCommand = scb.GetInsertCommand(true).CommandText;
sqlDS.UpdateCommand = scb.GetUpdateCommand(true).CommandText;
sqlDS.DeleteCommand = scb.GetDeleteCommand(true).CommandText;
Run Code Online (Sandbox Code Playgroud)
这当然要求所有表都具有可用于生成相关更新和删除语句的主键.如果没有,您将获得有关动态SQL生成的例外.即使您不喜欢这种方法,因为在数据库引擎上查找模式的运行时成本,您总是可以使用T4模板预先生成它们,而不是手动输入它们.
| 归档时间: |
|
| 查看次数: |
1680 次 |
| 最近记录: |