2011-06-21 47 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(); 

這樣一來,新添加或更新的記錄,可以「看到」系統