2016-08-08 3 views
0

私は左にExplorerスタイルのTreeViewを持つWinFormsアプリケーションを持っています。異なるノードを選択すると、他のさまざまな標準コントロールで構成された異なるUserControlが表示されます。さまざまなUserControl内のすべてのコントロールは、単一のDataSetにバインドされています。私はツリーのスコープの上にあるComboBoxを持っています(テストとライブ設定の間で変更するために)マスターテーブルをバインドし、テーブル間のマスター/ディテール関係をセットアップすると、ComboBoxを変更するとすべての子テーブルの現在の行が変更されます。ここまでは順調ですね。WinFormsのプログラムでの詳細のバインディング

私はプラグ可能なサブツリー(別々のDLLからピックアップ)を追加しました。各サブツリーはそれ自身のデータセットを使用します。私が問題を抱えている部分は、サブツリーをマスターテーブルにリンクさせる方法です。サブツリーのDataSets内にマスターテーブルをレプリケートしましたが(データセット間でリレーションシップが機能しないため)、サブツリーには独自のComboBoxがないため、バインディング作業を行う方法がわかりません。私は、各サブツリーのCurrencyManagerが必要で、どういうわけかそれらをComboBoxのchangeイベントにリンクしていますが、サブツリーのUserControlをCurrencyManagerに関連付けるにはどうすればいいですか?

答えて

0

サブツリーのユーザーコントロールでそれを設定し、私は、サブツリーのBindingContextを作成していた行方不明になった作品...その後

bindingContext = new BindingContext(); 

...と:

public partial class MyUserControl : UserControl 
{ 
    public MyUserControl(BindingContext bindingContext, DataSet dataSet) 
    { 
     this.BindingContext = bindingContext; 
     InitializeComponent(); 
     myTextBox.DataBindings.Add("Text", dataSet, "Master.Master_Detail.DetailField"); 
    } 
} 

IデータセットにリンクするためにCurrencyManagerを明示的に作成する必要がないことを理解していませんでした。データバインディングを設定するだけで十分です。

public void MasterChanged(long masterID) 
{ 
    var currencyManager = bindingContext[dataModel.DataSet, "Master"]; 
    var masterRows = masterTable.Rows; 
    for (int position = 0; position < masterRows.Count; position++) 
    { 
     if (((long)masterRows[position]["ID"]) == masterID) 
     { 
      currencyManager.Position = position; 
      break; 
     } 
    } 
} 
:ステップにおいて2つの別々のデータセットを維持

は、次にちょうどこのような方法を必要としました

関連する問題