|
|
|
การเข้าถึง/แก้ไข BindingSource ก่อนทำการ SaveChangesAsync |
|
|
|
|
|
|
|
มีใครทำ INSERT UPDATE DELETE VIEW AND SEARCH ประมาณนี้มั้ยครับ
http://foxlearn.com/article/insert-update-delete-view-search-data-from-sql-server-in-csharp-61.html
ผมสงสัยว่าเราจะเข้าถึง Attribute ใน Table ก่อน Save ได้หรือไม่ อย่างไร?
ความต้องการคือต้องการ Assign ค่าให้กับ
UpdatedBy,
UpdatedDate,
CreatedBy,
CreatedDate
แล้วค่อยทำการ Save ครับ
ลองหาโค้ดมาใช้เรียกใช้ เช่น
Code (C#)
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TrainingManagement.Dao
{
class BaseEntity
{
public DateTime? CreatedDate { get; set; }
public string UserCreated { get; set; }
public DateTime? UpdatedDate { get; set; }
public string UserModified { get; set; }
}
//public class Student : BaseEntity
//{
// public int Id { get; set; }
// public string Name { get; set; }
//}
public class SchoolContext : TrainingManagement.Model.TrainingManagementEntities
{
//public DbSet <Student> Students { get; set; }
public override int SaveChanges()
{
AddTimestamps();
return base.SaveChanges();
}
public override async Task<int> SaveChangesAsync()
{
AddTimestamps();
return await base.SaveChangesAsync();
}
private void AddTimestamps()
{
var entities = ChangeTracker.Entries().Where(x => x.Entity is BaseEntity && (x.State == EntityState.Added || x.State == EntityState.Modified));
var currentUsername = "592560";
//var currentUsername = !string.IsNullOrEmpty(System.Web.HttpContext.Current?.User?.Identity?.Name)
// ? HttpContext.Current.User.Identity.Name : "Anonymous";
foreach (var entity in entities)
{
if (entity.State == EntityState.Added)
{
((BaseEntity)entity.Entity).CreatedDate = DateTime.UtcNow;
((BaseEntity)entity.Entity).UserCreated = currentUsername;
}
((BaseEntity)entity.Entity).UpdatedDate = DateTime.UtcNow;
((BaseEntity)entity.Entity).UserModified = currentUsername;
}
}
}
}
แล้ว Debug ดูพบว่า มันไม่เข้าลูป " foreach (var entity in entities)" เลยครับ
Code หลักที่ผมเขียน ดังนี้ครับ สามารถ Add/ Save / Delete ได้
มีการทำ Binding กับ Textbox และ datagridview
Code (C#)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress;
using MetroFramework;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
namespace TrainingManagement.Forms
{
public partial class frmEmployeeMst : Form
{
TrainingManagement.Dao.BindingCombobox bindingCombobox = new Dao.BindingCombobox();
TrainingManagement.Model.TrainingManagementEntities model = new TrainingManagement.Model.TrainingManagementEntities();
TrainingManagement.Gui.Gui_Datagrid gui_Datagrid = new Gui.Gui_Datagrid();
public frmEmployeeMst()
{
InitializeComponent();
}
#region Event CRUD.
private void Ctrl_ctrlBtnAddClick(object sender, EventArgs e)
{
try
{
tbEmpId.Focus();
Model.HR_EMP_MST c = new Model.HR_EMP_MST();
model.HR_EMP_MST.Add(c);
hREMPMSTBindingSource.Add(c);
hREMPMSTBindingSource.MoveLast();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
hREMPMSTBindingSource.ResetBindings(false);
}
}//Add|New
private async void Ctrl_ctrlBtnSaveClick(object sender, EventArgs e)
{
try
{
//
//ต้องการ Assign ค่าให้กับบาง Field ใน Table : HR_EMP_MST
//เช่น UpdatedBy, UpdatedDate, CreatedBy, CreatedDate ก่อนทำการ save จะทำได้อย่างไรบ้างครับ
//Original
hREMPMSTBindingSource.EndEdit();
await model.SaveChangesAsync();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Message", MessageBoxButtons.OK, MessageBoxIcon.Error);
hREMPMSTBindingSource.ResetBindings(false);
}
}//Save|Update
private void Ctrl_ctrlBtnRefreshClick(object sender, EventArgs e)
{
hREMPMSTBindingSource.ResetBindings(false);
foreach (DbEntityEntry entry in model.ChangeTracker.Entries())
{
switch (entry.State)
{
case EntityState.Added:
entry.State = EntityState.Detached;
break;
case EntityState.Modified:
entry.State = EntityState.Unchanged;
break;
case EntityState.Deleted:
entry.Reload();
break;
}
}
}//Read|Refresh
private void Ctrl_ctrlBtnDeleteClick(object sender, EventArgs e)
{
if (MessageBox.Show("Are you sure want to delete this record ?", "Message", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
model.HR_EMP_MST.Remove(hREMPMSTBindingSource.Current as Model.HR_EMP_MST);
hREMPMSTBindingSource.RemoveCurrent();
}
}//Delete
private void Ctrl_ctrlBtnSearchClick(object sender, EventArgs e)
{
}//Search
#endregion
#region Event Misc.
private void FrmEmployeeMst_Load(object sender, EventArgs e)
{
FnBinding();
FnStart();
//MetroFramework.MetroMessageBox.Show(this, "Your username and password don't match.", "Message", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Information);
}
private void FnStart()
{
model = new Model.TrainingManagementEntities();
hREMPMSTBindingSource.DataSource = model.HR_EMP_MST.ToList();
dgvMaster1.DataSource = hREMPMSTBindingSource;
gui_Datagrid.dgvStyte(dgvMaster1);
}
private void FnBinding()
{
bindingCombobox.FnBindingPostitionCode(cbPositionCode);
bindingCombobox.FnBindingDeptCode(cbDeptCode);
bindingCombobox.FnBindingDivCode(cbDivCode);
bindingCombobox.FnBindingDistrict_id(cbTh_Districts);
bindingCombobox.FnBindingAmphure_id(cbTh_Amphures);
bindingCombobox.FnBindingProvince_id(cbTh_Provinces);
bindingCombobox.FnBindingZipcode_id(cbTh_Zipcodes);
bindingCombobox.FnBindingUdf(cbNameprefix, "HR_EMP_MST", "HR_NAMEPREFIX", "TH");
bindingCombobox.FnBindingUdf(cbNameprefix_en, "HR_EMP_MST", "HR_NAMEPREFIXENG", "EN");
bindingCombobox.FnBindingUdf(cbWorkState, "HR_EMP_MST", "HR_WORKSTATE", "EN");
bindingCombobox.FnBindingUdf(cbFsState, "HR_EMP_MST", "HR_FSSTATE", "EN");
bindingCombobox.FnBindingUdf(cbSex, "HR_EMP_MST", "HR_SEX", "TH");
bindingCombobox.FnBindingUdf(cbLabor, "HR_EMP_MST", "HR_LABOR", "EN");
bindingCombobox.FnBindingUdf(cbRoute_van, "HR_EMP_MST", "HR_ROUTE_VAN", "TH");
}
private static void DisplayTrackedEntities(TrainingManagement.Model.TrainingManagementEntities context)
{
Console.WriteLine("Context is tracking {0} entities.", context.ChangeTracker.Entries().Count());
DbChangeTracker changeTracker = context.ChangeTracker;
var entries = changeTracker.Entries();
foreach (var entry in entries)
{
Console.WriteLine("Entity Name: {0}", entry.Entity.GetType().FullName);
Console.WriteLine("Status: {0}", entry.State);
}
}
#endregion
}
}
Tag : .NET, Ms SQL Server 2016, LINQ, Entity Framework (EF), VS 2017 (.NET 4.x), Windows
|
ประวัติการแก้ไข 2019-05-21 15:57:57
|
|
|
|
|
Date :
2019-05-21 15:56:24 |
By :
jaypang |
View :
1788 |
Reply :
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คำตอบของคุณหลายฯคำถาม/คำถามของคุณน้อยคำตอบ ผมมองว่า "งดงาม"
ผมมั่วฯซั่วฯ อาศัยความเมา/หน้าด้าน/แล้วแต่จะเรียก/etc...
--- ถ้าผมเมาแล้วผมจะเล่าเรื่องจริงให้ฟังเสมอ (ProgrammingXXXXXXXXXXXXXXX)
...
...
...
|
|
|
|
|
Date :
2019-05-23 21:16:54 |
By :
หน้าฮี |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Jaypang
ผมมั่วมั่วมั่ว ผมอ่านทางของคุณ ผ่านมาแล้วแสนวัน/วันนี้/พรุ่งนี้ ผมอ่านออกหมด
--- ประมาณว่า คนดีดีเขาไม่มาอยู่ที่ตรงนี้กัน
คุณไม่คุยต่อ/ผมได้อะไร?
คุณคุยต่อ/ผมได้อะไร?
+55555
|
|
|
|
|
Date :
2019-05-28 21:05:58 |
By :
หน้าฮี |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|