2016-12-01 14 views
0

にデータバインドGridViewのコンボボックス列の値を設定および取得する私はそれでコンボボックス列を持つデータグリッドビューを持って、私はこのようなDataTableのためにその列をバインドしていますどのようにC#の

((grdItems.Columns[1]) as DataGridViewComboBoxColumn).DataSource = dt; 
((grdItems.Columns[1]) as DataGridViewComboBoxColumn).DisplayMember = "LocationName"; 
((grdItems.Columns[1]) as DataGridViewComboBoxColumn).ValueMember = "Id"; 

今私は、このように選択された値を取得できます。

var value = grdItems.Rows[0][1].Value; 

しかし、問題は、私は手動で(グリッドを結合せず)のGridViewに行を追加するとき、私はコンボボックスセルの値を取得カント、です。 私はこのような行を追加しています:私は VAR値= grdItems.Rows [0] [1] .Valueのを使用する場合

grdItems.Rows.Add(1, 1, "Some Value"); 

このメソッドは値を取得するために、私はこのセルの値、すなわちのテキストを返しません。

どうすればこの問題を解決できますか?行を手動で追加する場合や、データバインド行を追加する場合は、セルの値が必要です。

答えて

0

手動で行を追加することはUIからの意味であるため、新しく追加された行の値を取得する方法の1つは、行を追加するときに発生するeventsevent handlerを使用することです。コメントに記載された実際の要件に基づいて - 実際の要件であること取り出す:このあまり使わなく

this.myGridView.RowsAdded += new DataGridViewRowsAddedEventHandler(myGridView_RowsAdded); 

private void myGridView_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) 
{ 
    var newRow = this.myGridView.Rows[e.RowIndex]; 
} 

編集オプションではありません - https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.rowprepaint(v=vs.110).aspx - あなたは、次の 1)RowsAddedhttps://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.rowsadded(v=vs.110).aspx 2)RowPrePaintの1つを使用することができますボタンのCOMBOXボックス列に対応し、新たに追加された行のセル値(Id)がクリックされたイベントを保存

あなたがデータソース自体にコンボボックスをバインドしていると仮定すると、意味、あなたの

combobox.DataSource=someList 

ので、何を行うことができますことは、私は新しい行が追加されたときに、列の値をたくないLINQクエリ

someList.Where(v=>v.Text.Equals("row.Cells[1].Value")).FirstOrDefault().Id 
+0

を書きです。後でグリッドのすべての行をループして値を取得し、コンボボックスのセルを含む各セルの値を取得する –

+0

新しく追加した行をメモリに保存して後で再訪することでこれを行うことができます。あなたは後で何を意味しますか? – Jaya

+0

はい、保存ボタンを押すことによって..保存ボタンをクリックすると私はこれをしました:foreach(grdView.RowsのDataGridViewRow行){var val = row.Cells [1] .Value; }しかし、これは私のセルのテキスト、私はそれにバインドしているその値ではない –