簡體   English   中英

更新數據庫之前的C#SQL DataGridView更改字段

[英]C# SQL DataGridView change field before updating database

我有一個WindowsForms應用程序,其中DataGridView綁定到SQL數據庫。 除一個(“ ts_last_edit”)以外的所有列都是可編輯的。 我只想每次有人更改某些其他列並保存更改時,僅以編程方式使用當前DateTime更新“ ts_last_edit”列。 我嘗試了這個:

...
    this.MyTableAdapter.Adapter.RowUpdating += Adapter_RowUpdating;
...
private void Adapter_RowUpdating(object sender, SqlRowUpdatingEventArgs e)
{
  e.Row["ts_last_edit"]=DateTime.Now;    
}

但這沒有用,因為e.Row顯然是一個只讀屬性。

我嘗試更改UPDATE SQL命令,它可以正常工作:

private void Adapter_RowUpdating(object sender, SqlRowUpdatingEventArgs e)
{
// pseudo code
string newSqlCommand= "STUFF CURRENT DATE AND TIME IN COLUMN ts_last_edit";
e.Command.CommandText = newSqlCommand;
}

可以,但是我想知道是否有更好的方法可以做到這一點。 謝謝

您需要在更新時間后將更改合並回數據集

private void brandBookBindingNavigatorSaveItem_Click(object sender, EventArgs e)
{
  this.Validate();
  var changes = dataSet1.GetChanges();
  if(changes!=null && changes.Tables["BrandBook"].Rows.Count>0)
  {
    foreach(row in changes.Tables["BrandBook"].Rows)
    {
      row["ts_last_edit"] = DateTime.Now;
    }
  }
  dataSet1.Merge(changes, false,System.Data.MissingSchemaAction.Add);
  this.brandBookBindingSource.EndEdit();
  this.tableAdapterManager.UpdateAll(this.dataSet1);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM