اگر از بایندینگ سورس استفاده می کنید میتونید از متدهای AddNew و RemoveCurrent و ... برای درج و حذف استفاده کنید.
مثال:
مدل public class Person
{
[Key]
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[NotMapped]
public string FullName
{
get { return FirstName + " " + LastName; }
}
[Required]
public decimal Amount { get; set; }
}
class DatabaseContext :DbContext
{
public DbSet<Person> Persons { get; set; }
}
یک فرم شامل دیتاگرید، دکمه های افزودن، حذف سطرجاری، لغو تغییرات و ذخیره تغییرات، چهار تکست باکس شامل تکست باکس id(که readonly هست) نام و نام خانوادگی و مقدارپاداش.
کد فرم
public partial class Main : Form
{
private DatabaseContext _context;
private BindingSource _bindingSource;
public Main()
{
InitializeComponent();
_context = new DatabaseContext();
_context.Persons.Load();
_bindingSource = new BindingSource
{
DataSource = _context.Persons.Local.ToBindingList()
};
dataGridView1.DataSource = _bindingSource;
DataGridViewColumn firstnameColumn = dataGridView1.Columns["FirstName"];
if (firstnameColumn != null) firstnameColumn.Visible = false;
DataGridViewColumn lastnameColumn = dataGridView1.Columns["LastName"];
if (lastnameColumn != null) lastnameColumn.Visible = false;
txtId.DataBindings.Add("Text", _bindingSource, "Id");
txtFirstName.DataBindings.Add("Text", _bindingSource, "FirstName");
txtLastName.DataBindings.Add("Text", _bindingSource, "LastName");
txtBonus.DataBindings.Add("Text", _bindingSource, "Amount");
}
private void btnAddNew_Click(object sender, EventArgs e)
{
_bindingSource.AddNew();
}
private void btnRemove_Click(object sender, EventArgs e)
{
_bindingSource.RemoveCurrent();
}
private void btnCancel_Click(object sender, EventArgs e)
{
foreach (var entry in _context.ChangeTracker.Entries<Person>())
{
entry.State = entry.State == EntityState.Added ? EntityState.Detached : EntityState.Unchanged;
}
_bindingSource.ResetBindings(false);
}
private void btnSave_Click(object sender, EventArgs e)
{
_context.SaveChanges();
}
}