我在加载时将数据集插入缓存
{
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();
}
然后使用da.Update()
as将数据保存回数据库
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");
}
如果修改的值和列的值修改,我需要将数据库表列更新UpdatedLoc1
为当前日期。Location1
UpdatedLoc2
Location2
如何使用RowState
更改方法实现这一点?
附近你做的位置
dr["Location1"] = e.NewValues["Location1"];
您应该将旧值与新值进行比较,并相应地设置 UpdatedLoc1 日期列。如果在更新 Location1 之前进行检查,则可以比较 DataSet 值和 NewValues 值。如果您在之后执行此操作,您可以向 DataRow 询问原始值和新值以计算是否进行了更改,例如使用dr["Location1", DataRowVersion.Original]
- 请参阅https://docs.microsoft.com/en-us/dotnet/api/ system.data.datarow.item?view=net-5.0#System_Data_DataRow_Item_System_String_System_Data_DataRowVersion _
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句