根据更改的GridView单元格值将数据库表"列"更新为当前日期



我在加载时将数据集插入缓存

{
string command = @"SELECT Item, Location1, UpdatedLoc1, Loation2, UpdatedLoc2 FROM Stock";
SqlDataAdapter sda = new SqlDataAdapter(command, con);
DataSet ds = new DataSet();
sda.Fill(ds, "Stock");
ds.Tables["Stock"].PrimaryKey = new DataColumn[] { ds.Tables["Stock"].Columns["Item"] };
Cache.Insert("DATASET", ds);
gvStockItems.DataSource = ds;
gvStockItems.DataBind();
}

在GridView更新事件中,我正在更新缓存

if (Cache["DATASET"] != null)
{
DataSet ds = (DataSet)Cache["DATASET"];
DataRow dr = ds.Tables["Stock"].Rows.Find(e.Keys["Item"]);
dr["Location1"] = e.NewValues["Location1"];
dr["Location2"] = e.NewValues["Location2"];
Cache.Insert("DATASET", ds);
gvStockItems.EditIndex = -1;
GetDataFromCache();
}

然后使用CCD_ 1作为将数据保存回数据库

using (SqlConnection con = new SqlConnection(cs))
{
SqlDataAdapter da = new SqlDataAdapter("SELECT Item, Location1, UpdatedLoc1, Loation2, UpdatedLoc2  FROM Stock", con);
DataSet ds = (DataSet)Cache["DATASET"];
string UpdateQuery = "UPDATE Stock SET Location1=@Location1, Loation2 =@Loation2 WHERE Item=@Item";
SqlCommand update = new SqlCommand(UpdateQuery, con);
update.Parameters.Add("@Item", SqlDbType.VarChar, 50, "Item");
update.Parameters.Add("@Location1", SqlDbType.Int, 0, "Location1");
update.Parameters.Add("@Loation2 ", SqlDbType.Int, 0, "Loation2");
da.UpdateCommand = update;
da.Update(ds, "Stock");                
}

如果Location1的值被修改,我需要将数据库表列UpdatedLoc1更新为当前日期,如果Location2的值被更改,我需要更新UpdatedLoc2列。

如何使用RowState更改方法来实现这一点?

进行的位置附近

dr["Location1"] = e.NewValues["Location1"];

您应该将旧值与新值进行比较,并相应地设置UpdatedLoc1日期列。如果在更新Location1之前进行检查,则可以比较DataSet值和NewValues值。如果之后执行,则可以向DataRow询问原始值和新值,以确定是否进行了更改,例如使用dr["Location1", DataRowVersion.Original]-请参阅https://learn.microsoft.com/en-us/dotnet/api/system.data.datarow.item?view=net-5.0#系统数据行条目系统字符串系统数据行版本_

最新更新