My UIは、ビジネスオブジェクトのリストにバインドされたデータグリッドビュー(AutoCreateColumns= false
)で構成されます。私のオブジェクトにPriceとQuantityという2つの列があり、グリッドに新しい列を追加したいとしましょう。 - 合計値 - 計算される値 - Price * Quantity、BUT、ビジネスオブジェクトは変更されません。計算オブジェクトにバインドされたDataGridViewの列
可能ですか?
My UIは、ビジネスオブジェクトのリストにバインドされたデータグリッドビュー(AutoCreateColumns= false
)で構成されます。私のオブジェクトにPriceとQuantityという2つの列があり、グリッドに新しい列を追加したいとしましょう。 - 合計値 - 計算される値 - Price * Quantity、BUT、ビジネスオブジェクトは変更されません。計算オブジェクトにバインドされたDataGridViewの列
可能ですか?
はい。
プログラムでグリッドにバインドされていない列を追加し、イベントを使用して列のセルに値を設定することができます。
結合していない列の内容を移入するには、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
ありがとうございます。このアプローチは、私が必要とするものに非常に近いと思われます。データの更新も機能します。どうもありがとう。 – DreadAngel
少し言及 - DataGridViewCellFormattingEventArgsパラメータの値フィールドは**文字列**値 – DreadAngel
になります。オブジェクトのtoString()表現は表示されませんか? –
いいえ、あなたのオブジェクトを編集する必要はありません。
編集可能なグリッドですか? –
グリッドからデータを編集できるかどうかを確認するには - – DreadAngel