2011-06-21 82 views
0

我需要知道在添加,更新或删除记录后是否有刷新绑定源的方式,以便在删除记录的情况下,我将能够显示在我的绑定导航工具栏中正确的记录数。添加,更新或删除后刷新绑定源

我正在制作一个工资单应用程序模块,用于添加银行。我无法添加两条连续记录(现在只能一次添加一条记录,关闭我的应用程序,然后添加另一条记录)。我的应用程序集成到SAP Business 1

在我BankMasterForm.cs我有

private void BankMaintenanceForm_Load(object sender, EventArgs e) 
{ 
    bankMasterBindingSource.DataSource = Program.Kernel.Get<IBankMasterService>().GetAllBankMasters(); 
} 

我也使用Ninject插件这个应用

我在IBankMasterService.cs代码(接口)的形式:

namespace Payroll.BLL 
{ 
    public interface IBankMasterService 
    { 
     IEnumerable<BankMaster> GetAllBankMasters(); 

     BankMaster GetBankMaster(string code); 

     void AddBankMaster(BankMaster bankMaster); 

     void UpdateBankMaster(BankMaster bankMaster); 

     void DeleteBankMaster(BankMaster bankMaster); 

     string GenerateSAPCode(); 
    } 
} 

我也有BankMasterService.cs类:

namespace Payroll.BLL 
{ 
    public class BankMasterService : IBankMasterService 
    { 
     private readonly IBankMasterRepository _bankMasterRepository; 

     public BankMasterService(
      IBankMasterRepository bankMasterRepository) 
     { 
      Guard.AgainstNullParameter(bankMasterRepository, "bankMasterRepository"); 

      _bankMasterRepository = bankMasterRepository; 
     } 

     public IEnumerable<BankMaster> GetAllBankMasters() 
     { 
      return _bankMasterRepository.SelectAll(); 
     } 

     public BankMaster GetBankMaster(string code) 
     { 
      var rulesException = new RulesException<BankMaster>(); 

      // Business rule: Answer Id cannot be less than 1 
      if (!code.HasValue()) 
       rulesException.ErrorFor(x => x.Code, "Code cannot be null"); 

      if (rulesException.Errors.Any()) throw rulesException; 

      return _bankMasterRepository.GetEntity(code); 
     } 

     public void AddBankMaster(BankMaster bankMaster) 
     { 
      // Business rule: 0 
      var errors = DataAnnotationsValidationRunner.GetErrors(bankMaster); 

      var rulesException = new RulesException(); 

      rulesException.ErrorsForModel(errors); 

      // Other validation rules 

      if (rulesException.Errors.Any()) throw rulesException; 

      // Save to database 
      _bankMasterRepository.Insert(bankMaster); 
     } 

     public void UpdateBankMaster(BankMaster bankMaster) 
     { 
      // Business rule: 0 
      var errors = DataAnnotationsValidationRunner.GetErrors(bankMaster); 

      var rulesException = new RulesException(); 

      rulesException.ErrorsForModel(errors); 

      // Other validation rules 

      if (rulesException.Errors.Any()) throw rulesException; 

      // Save to database 
      _bankMasterRepository.Update(bankMaster); 
     } 

     public void DeleteBankMaster(BankMaster bankMaster) 
     { 
      var bm = GetBankMaster(bankMaster.Code); 

      if (bm != null) 
      { 
       // Delete from database 
       _bankMasterRepository.Delete(bm); 
      } 
     } 

     public string GenerateSAPCode() 
     { 
      var result = default(long); 

      var codesList = from b in GetAllBankMasters() 
          select new { Code = long.Parse(b.Code) }; 

      codesList = codesList.OrderBy(x => x.Code); 

      var lastRecord = codesList.LastOrDefault(); 

      if (lastRecord != null) 
       result = lastRecord.Code + 1; 

      return result.ToString(); 
     } 
    } 
} 

一个例子删除我BankMasterForm.cs形式的功能是:

private void bindingNavigatorDeleteItem_Click(object sender, EventArgs e) 
{ 
    DialogResult result = MessageBox.Show("Are You Sure You Want To Delete This Record?", "Confirm", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 

    if (result == DialogResult.Yes) 
    { 
     // Get service instance 
     var bankMasterService = Program.Kernel.Get<IBankMasterService>(); 

     var bankMasterDelete = 
       new BankMaster 
       { 
        Code = txt_code.Text 
       }; 

     // Delete record 
     bankMasterService.DeleteBankMaster(bankMasterDelete); 

     //clear textfields after input 
     txt_code.Text = string.Empty; 
     txt_bank_code.Text = string.Empty; 
     txt_bank_name.Text = string.Empty; 
     cb_bank_type.Text = null; 
     txt_address1.Text = string.Empty; 
     txt_address2.Text = string.Empty; 
     txt_comments.Text = string.Empty; 

     MessageBox.Show("Bank Details Deleted Successfully"); 
    } 
} 

我的问题是,如何让我的绑定源,即:

bankMasterBindingSource.DataSource = Program.Kernel.Get<IBankMasterService>().GetAllBankMasters(); 

后删除刷新例如?

任何帮助将不胜感激。

+1

这是一个WinForms应用程序,或者一些其他的UI工具包?应将此信息添加到问题中,并可能添加到标记中。 –

+0

@Merlyn Morgan-Graham。这是一个SAP业务1附加 - Windows窗体应用程序 –

回答

-1

我很确定.ResetBindings()调用强制它刷新列表。

但是,如果您正在执行GUI操作,最好使用绑定源来执行删除操作。通过这种方式,您可以使用表单的验证属性等,然后实施下面的基础结构来完成您需要完成的工作。想象一下,一个多客户端系统即将发生许多变化,这个列表将不断刷新。因此,绑定源允许您抽取视图更改的时间和频率,但适用于维护具有某种程度健全性的本地状态。

+0

感谢您的答复。我不知道如何使用绑定源来执行删除。我必须研究那 –

+0

你的清单应该实施IList。 IList有一个.Remove功能。如果将IList绑定到绑定源,则调用BindingSource.Remove将在您的IList上为绑定项执行.Remove。这反过来会执行您的删除逻辑,为您的IList实施.Remove。 – Spence

-1

我找到了答案。只需在每次编辑或添加记录后添加此行代码即可。它刷新绑定源。

// Refresh the datasource 
bankMasterBindingSource.DataSource = Program.Kernel.Get<IBankMasterService>().GetAllBankMasters().ToList(); 

这样一来,新添加或更新的记录,可以“看到”系统

相关问题