【发布时间】:2016-08-02 17:36:54
【问题描述】:
我有一个带有多个数据键名的gridview(这是因为数据库中没有PK):
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="SqlDataSource1" DataKeyNames = "id,group,sto,busn"
onrowcommand="Add_RowCommand" onrowupdating="GridView1_RowUpdating" >
当行被更新时,我只想改变那一行,并试图通过将原始值存储在字符串中并在 where 子句中使用它来实现。我在 SQL Server Management Server 中对此进行了测试,效果很好。
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
string connectionString = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(connectionString);
TextBox id = (TextBox)rowIndex.FindControl("idTB");
string old_id = e.OldValues["ID"].ToString();
TextBox first_name = (TextBox)rowIndex.FindControl("fnameTB");
TextBox last_name= (TextBox)rowIndex.FindControl("lnameTB");
DropDownList group =(DropDownList)rowIndex.FindControl("groupDDL");
string old_group= e.OldValues["Group"].ToString();
TextBox sto= (TextBox)rowIndex.FindControl("stoTB");
string old_sto= e.OldValues["Sto"].ToString();
DropDownList busn= (DropDownList)rowIndex.FindControl("buDDL");
string old_busn= e.OldValues["Busn"].ToString();
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "UPDATE tablename SET id= @id, first_name= @first_name, last_name= @last_name, group= @group, sto= @sto, busn= @busn, WHERE id= @old_id AND group = @old_group AND (sto = @old_sto OR (@sto is null and sto is null)) AND busn = @old_busn";
cmd.Parameters.AddWithValue("@id", id.Text);
cmd.Parameters.AddWithValue("@old_id", old_id);
cmd.Parameters.AddWithValue("@first_name", first_name.Text);
cmd.Parameters.AddWithValue("@last_name", last_name.Text);
cmd.Parameters.AddWithValue("@group", group.SelectedValue);
cmd.Parameters.AddWithValue("@old_group", old_group);
cmd.Parameters.AddWithValue("@sto", CheckGroupingCode(sto.Text));
cmd.Parameters.AddWithValue("@old_sto", old_sto);
cmd.Parameters.AddWithValue("@busn", busn.SelectedValue);
cmd.Parameters.AddWithValue("@old_busn", old_busn);
cmd.Connection = conn;
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
Response.Redirect("tablename.aspx");
}
更新:问题是我的 OldValues 返回为 null。
【问题讨论】:
-
(sto = @old_sto OR (@sto is null and sto is null))目的是什么 -
(sto = @old_sto OR @sto IS NULL)。我认为这是正确的方式