我有多次的DataKeyNames GridView中(这是因为在数据库中没有PK):更新在GridView中单列多的DataKeyNames
<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回来为空。
'(STO = @old_sto OR(@sto是零和STO为null))'什么是它的目的 – jonju
申通为空 – a1yx
'( sto = @old_sto或@sto IS NULL)'。我认为这是正确的方法 – jonju