2016-04-26 10 views
0

を使用した場合の位置を設定していない:のBindingSourceが、私はカスタムオブジェクトのリストにバインドされたのBindingSourceを持っている、と私は次のメソッドを持っているIndexOfメソッド

private void SetMyItem(MyItem item) 
{ 
    //Test 1 
    if (item != null) 
    { 
     bsItems.Position = bsItems.List.IndexOf(item); 
    } 

    //Test 2 
    foreach (var itm in bsItems) 
    { 
     if (itm.IsEqual(item)) 
     { 
      bsItems.Position = bsItems.List.IndexOf(itm); 
      break; 
     } 
    } 
} 

リストは、いくつかの項目が含まれており、これらの一つでもありますメソッドに渡されるパラメータ

上記の最初のテストでは、渡されたパラメータのインデックスを取得することで、直ちに位置を設定します。位置は-1です。

渡されたパラメータがリスト内の項目と同じであることを確認するために、2番目のテストを追加しました。一致するアイテムが見つかりましたが、位置は-1です。

バインド元が正しい位置に設定されていないのはなぜですか?

EDIT

IsEqualバイナリストリームに両方のオブジェクトをシリアル化し、それらを比較する拡張メソッドです。予想通り2

IndexOf

EDITが働いています。正しいインデックスを返しています。ただし、Positionをこのインデックスに設定しても機能しません。

+0

'IsEqual'は何ですか? – Crowcoder

+1

['IndexOf'](https://msdn.microsoft.com/en-us/library/system.collections.ilist.indexof(v = vs.110).aspx#Anchor_1)メソッドは、コレクションのオブジェクト ' ['Equals'](https://msdn.microsoft.com/en-us/library/bsc2ak47(v=vs.110).aspx)と[' CompareTo'](https://msdn.microsoft.com/ en-us/library/system.icomparable.compareto(v = vs.110).aspx)アイテムが存在するかどうかを判断するメソッド。等しい値のプロパティを持つ2つのオブジェクトを持つことは、それらのオブジェクトが等しいことを意味しません。 –

+0

@RezaAghaeiそのことを私が推測していた。 –

答えて

0

正しく設定される位置を取得する唯一の方法が何をしているようです:

bsItems.ResetBindings(false); 
bsItems.Position = bsItems.IndexOf(myItem); 
+1

['ResetBindings'](https://msdn.microsoft.com/en-us/library/system.windows.forms.bindingsource.resetbindings(v = vs.110).aspx)メソッドは、コントロールが' BindingSource'を使用して、リスト内のすべての項目を再度読み込み、表示された値を更新します。 –

+1

現在、将来の読者には、この答えは誤解を招きます。これが答えになると思われる場合は、単純なコードを共有して問題を再現し、この推奨がどのように問題を解決するかを示してください。 –

0

変更あなたのforeachのは、あなたがbsItemsを反復処理しているが、あなたはbsItems.List内のオブジェクトを見つけようとしている

foreach (var itm in bsItems.List) 
{ 
    if (itm.IsEqual(item)) 
    { 
     bsItems.Position = bsItems.List.IndexOf(itm); 
     break; 
    } 
} 

されるように。それらは違う。

+0

なぜ違いますか? –

+1

違いはありません。 'BindingSource'または' List'を 'for'ループで使用するかどうかは関係ありません。また、 'BindingSource.IndexOf'と' BindingSource.List.IndexOf'は全く同じです。実際には 'BindingSource'は' IndexOf'で 'List'を、' for'ループで 'BindingSource'を使用しています。 –

+0

@ Ivan-MarkDebono私は知らない。私はあなたのbsItemsオブジェクトが何であるか知りません。 bsItemsのタイプが何であるか教えてください。 – CathalMF

関連する問題