2012-05-11 24 views
5

My UIは、ビジネスオブジェクトのリストにバインドされたデータグリッドビュー(AutoCreateColumns= false)で構成されます。私のオブジェクトにPriceとQuantityという2つの列があり、グリッドに新しい列を追加したいとしましょう。 - 合計値 - 計算される値 - Price * Quantity、BUT、ビジネスオブジェクトは変更されません。計算オブジェクトにバインドされたDataGridViewの列

可能ですか?

+0

編集可能なグリッドですか? –

+0

グリッドからデータを編集できるかどうかを確認するには - – DreadAngel

答えて

5

はい。

プログラムでグリッドにバインドされていない列を追加し、イベントを使用して列のセルに値を設定することができます。

結合していない列の内容を移入するには、2つの主要な方法があります。を扱うにはイベントをRowsAddedかCellFormattingイベントを処理します。グリッドが編集可能な場合CellValueChangedも処理する必要があります。 CellFormattingイベントを使用して、セル内に表示されている値を、実際にグリッドの背後にあるデータに格納されている値とは異なる値に変換することもできます。

コードサンプル - 詳細

private void OnCellFormatting(object sender, 
    DataGridViewCellFormattingEventArgs e) 
{ 

    if (e.ColumnIndex == grid.Columns["Unbound"].Index) 
    { 
     e.FormattingApplied = true; 
     DataGridViewRow row = grid.Rows[e.RowIndex]; 
     e.Value = string.Format("{0} : {1}", 
      row.Cells["SomeColumn1"].Value, 
      row.Cells["SomeColumn2"].Value); 
    } 
} 

private void OnRowsAdded(object sender, 
    DataGridViewRowsAddedEventArgs e) 
{ 

    for (int i = 0; i < e.RowCount; i++) 
    { 
     DataGridViewRow row = grid.Rows[e.RowIndex + i]; 
     row.Cells["Unbound"].Value = string.Format("{0} : {1}", 
     row.Cells["SomeColumn1"].Value, 
     row.Cells["SomeColumn2"].Value); 
    } 
} 

もっと - http://www.informit.com/articles/article.aspx?p=446453&seqNum=5

+0

ありがとうございます。このアプローチは、私が必要とするものに非常に近いと思われます。データの更新も機能します。どうもありがとう。 – DreadAngel

+1

少し言及 - DataGridViewCellFormattingEventArgsパラメータの値フィールドは**文字列**値 – DreadAngel

+0

になります。オブジェクトのtoString()表現は表示されませんか? –

0

いいえ、あなたのオブジェクトを編集する必要はありません。

関連する問題