私は 2 つの DataGridViews (DGV) を持っており、両方にフォーマットしたい通貨列があります。私が書いているコードは、一方では機能するようですが、他方では機能しないようです。
両方の DGV は次のように設定されています。データは最初に DataTable にロードされます。次に、BindingSource がこの DataTable にリンクします。最後に、DGV はこの BindingSource オブジェクトをデータに使用します。
フォームの Load イベントで次のコードを使用して、両方の DGV の通貨列をカスタマイズします。
dataGridView.Columns[columnIndexHere].DefaultCellStyle.FormatProvider = CultureInfo.GetCultureInfo("de-DE");
dataGridView.Columns[columnIndexHere].DefaultCellStyle.Format = String.Format("c")
一方のDGVで列をフォーマットしているようです。また、動作していない DGV には、親フォームにそれほど多くの機能コードがありません..コードと DGV のプロパティをチェックして、フォーマットを別の場所で変更しているかどうかを確認しましたが、何も見つかりませんでした..
2 つの DGV がデータをロードする方法の唯一のわずかな違いは、最初の DGV の DataTable (書式設定が機能する) では、データが SELECT ステートメントを介して (自分の関数を介して) ロードされることです... 2 番目の DGV の DataTable では (このシナリオではユーザーがデータを入力する必要があるため、DB からデータをロードせず、(DataTable で) 列を手動で定義するだけです。
2 番目の DGV でフォーマットが機能しない理由の手がかりはありますか?
編集:詳細情報の追加:
この問題を実証するために、新しい C# winforms プロジェクトを作成し、それに DataGridView を 1 つだけ追加して、次のコードを Load イベントに追加しました。このコードでも、通貨の書式設定は行われていません。
DataTable dataTable = new DataTable();
dataTable.Columns.Add("ColA");
dataTable.Columns.Add("ColB");
dataTable.Columns.Add("ColC");
dataTable.Rows.Add("John", 832.293, "London");
dataTable.Rows.Add("Alice", 32972978.20489, "Atlanta");
dataTable.Rows.Add("Mark", 9184793284739, "Tokyo");
BindingSource bindingSource = new BindingSource();
bindingSource.DataSource = dataTable;
dataGridView1.DataSource = bindingSource;
var format = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone();
format.CurrencySymbol = "Mn. ";
dataGridView1.Columns["ColB"].DefaultCellStyle.FormatProvider = CultureInfo.GetCultureInfo("de-DE");
dataGridView1.Columns["ColB"].DefaultCellStyle.Format = String.Format("c");
これが問題の診断に役立つことを願っています..