2011-06-21 9 views
0

レコードを追加、更新、または削除した後にバインディングソースをリフレッシュする方法があるかどうかを知る必要がありました。レコードを削除すると、拘束力のあるナビゲータツールバーの適切なレコード数。追加、更新、または削除後のバインディングソースのリフレッシュ

現時点で銀行を追加するための給与計算アプリケーションモジュールを作成しています。私は2つの連続したレコードを追加することはできません(一度に1つずつ追加することができます、私のアプリを閉じてから別のものを追加することができます)。私のアプリケーションは、私が

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

私もこのアプリケーションにNinjectのアドオンを使用していますを持っているSAPビジネスに私のBankMasterForm.cs 1.

を統合されている

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フォームに機能を削除するには、次のとおりです。削除後にリフレッシュし

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

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"); 
    } 
} 

私の質問は、私は私のバインディングソース、すなわちを得るのですか、です例えば?

ご協力いただきますようお願い申し上げます。

+1

これはのWinFormsアプリケーション、またはいくつかの他のUIツールキットですによって「見る」ことができますか?この情報は、質問に追加する必要があり、場合によってはタグに追加する必要があります。 –

+0

@Merlyn Morgan-Graham。それは、SAP Business 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(); 

この方法では、新しく追加または更新されたレコードは、システム

関連する問題