私はググって、winformsにitemdataboundまたはrowdataboundがないことを理解しました。RowAdded または CellFormatting を使用する必要があります...
Datagridview - Winforms - C#
次の2つの状況があり、修正方法がわかりません。私のデータソースは Genericlist です... リスト 「ドキュメント」リストには、DocumentNumber、DocType、AccountNumber、および Amount が含まれます。例えば
DocumentNumber = 100 type-> int
DocType = F type-> string
AccountNumber = 9873 type-> String
Amount = 12345.25 type-> Decimal
私のデータグリッドは次のようになります
DocumentNumber Dotype AccountNumber AccountDescription Amount
100 F 9873 VAT return 12.345,25
101 C 4341 VAT payable - 3.326,63
要件:
1) 行ごとに AccountDescription を取得し、グリッドに配置します。そのため、すべての行でアカウント番号を取得し、Accountdescription を取得して Datagrid 列に配置する関数を呼び出します。
2) Doctype = "C" で、金額フィールドを負にする (つまり、金額の前にマイナスを付ける)
3) 金額の入力にフォーマットを適用します: 12345.25 そしてそれを 12.345,25 にします
//make the Credit amount negative
void dataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
DataGridViewRow row = dataGridView.Rows[e.RowIndex];
if (dataGridView.Columns[e.ColumnIndex].Name == "TypeDoc" && e.Value != null && e.Value.ToString() == "C")
{
dataGridView.Rows[e.RowIndex].DefaultCellStyle.ForeColor = Color.Red;
//make the amount fields negative and apply formatting.
row.Cells[4].Value = Convert.ToDecimal(row.Cells[4].Value, CultureInfo.GetCultureInfo("NL-be")) * -1;
}
}
問題:
1) AccountDescription を取得する方法、CellFormatting はすべてのセルをループしていますか? つまり、どのイベントで関数を呼び出して AcountNumber を渡す必要があるので、説明を返し、説明を Datagrid 列に戻す必要がありますか????
2)Cellformattingを使用してDoctypeがCであるかどうかを確認し、「C」の場合はREDの色を適用し、ネガティブにしてフォーマットを適用します....しかし、問題は赤が正常に機能することです...ネガティブではありません.. 行 (赤) をクリックすると、マイナス記号の量が表示されます。他の行をクリックするとマイナス記号(マイナス)が戻ってきて、別の行をクリックしてもう一度赤にするとマイナス記号が表示されます...
私もrowsAddedイベントを使用してみましたが、2〜3回ループした後、終了し、2〜3回ループすることもありますが、理由がわかりません.....
要するに: datagridView (バインド後) のすべての行をループして値を変更したい場合、何をする必要がありますか?
では、Cellformatting の背後にあるものは何ですか。上記の2つのステップを達成する方法は?