2012-02-13 19 views
0

DataGridViewに各DataGridViewComboBoxCellの項目を個別に設定する必要があります(各コンボボックスには異なる項目が必要です)。DataGridViewComboBoxCellの項目を設定する

foreach (DataGridViewRow row in grid.Rows) 
{ 
    ((DataGridViewComboBoxCell)row.Cells[1]).Items.Clear(); 
    foreach (Product prod in _ProductList) 
    { 
     ((DataGridViewComboBoxCell)row.Cells[1]).Items.Add(prod.Name); 
    } 
} 

のデバッグは、私がDataGridViewComboBoxCellの項目が正しく設定されている参照が、私は、グリッドを見たとき、コンボは空です:私はアイテムを設定するには、このコードを使用します。

異なるテスト私は、フォームがロードされた後にアイテムを設定すると(たとえばクリックイベントなどで)アイテムが正常に表示されることに気付きました。

フォームの読み込み時にアイテムを読み込むにはどうすればよいですか?

+0

DataGridViewComboxにDataSourceが添付されていますか..特定のアイテムのDataSourceをstring.Emptyに設定すると問題が解決するのでしょうか?DataBinding Issueのように聞こえるかもしれません。あなたがforeachループを使って設定しようとしている項目は、http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcomboboxcell.aspx – MethodMan

+0

ここにも説明されていますmore .. http://homepage.ntlworld.com/herring1/datagrid.html – MethodMan

+0

あるいは、私は、while looopで項目を設定する代わりにDataSourceを使用しようとしました。しかし、問題は同じままです。 DataGridViewComboBoxColumnをDataGridViewComboBoxCellの代わりに設定すると、アイテムはグリッドに正しく埋められますが、各セルには異なるアイテムがあるため、この解決策はできません。 – joaocarlospf

答えて

1

foreachループをどのように実行していますか?コンストラクタ内にあれば、それは早すぎるかもしれません。 Form_Loadまたは後で実行される別のハンドラに移動してみてください。

コンボボックスの現在の値を列hereに設定する方法について質問をしましたが、同様の問題が発生している可能性があります。私がhereをしたので、あなたがコントロールのライフサイクルでそれほど遅くすると、細胞のDataSourceの働きを設定することが分かります。

+0

完了!コードはコンストラクタ上にありました。私がOnLoadメソッドに移動したとき、それは完全に機能しました!それは私の問題を非常にうまく解決しました。どうもありがとう。 – joaocarlospf

+0

コンストラクタでコンボボックスセルを埋めることがなぜできないのか分かりません。 – joaocarlospf

+0

WinFormsのC#コントロールは、Windows C APIコールの古いものよりも、フラグとメッセージと狂気を伴うラッパーに過ぎません。コンクリートボックスの選択肢のコンテナの構築には、建設と負荷の間にあらゆる種類のものがあります。それが構築される前に、選択肢を設定するための呼び出し(おそらくparamsやstuffを含むメッセージとして送出される)は、基礎となるAPIによって無視されるだけです。これは、Windows APIの霧の記憶に基づいた半分の説明であり、実動コードでは使用しないでください;) –

関連する問題