簡単な方法は、DataGridViewにBindingSourceを割り当て、BindingSoureにBindingListを割り当てることです。通貨を表示する列のデフォルトのセルスタイル形式をC2に設定します。
これを実行すると、通貨列の追加/変更/削除されたセルが自動的に書式設定されます。
ただし、BindingSourceを使用しない場合は、自分で書式設定する必要があります。イベントDataGridViewCell.CellValidatingとDataGridViewCell.CellFormatingを使用します。
フォーマットC2で表示する必要がある10進値を持つcolumnCurrencyがあるとします。 DefaultCellFormatはC2に設定されています。セルを検証するにあたり
、値が本当に小数かどうかをチェック:
private void OnCellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (e.RowIndex == -1) return;
if (e.ColumnIndex == this.columnValue.Index)
{
decimal value;
e.Cancel = !Decimal.TryParse((string)e.FormattedValue, out value);
}
}
セルをフォーマットする必要がありますたびに、e.Valueに値を書式:
private void OnCellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == this.columnValue.Index)
{
if (e.Value == null)
{ // show the Null value:
e.Value = e.CellStyle.NullValue;
e.FormattingApplied = true;
}
else
{ // because validated I know value is a decimal:
decimal value = Decimal.Parse((string)e.Value);
e.Value = value.ToString(e.CellStyle.Format);
e.FormattingApplied = true;
}
// If desired apply other formatting, like background colouring etc
}
}
あなたドン場合通貨フォーマットとして「C2」を使用したい場合は、ファンクションFormatCurrency
を使用することをお薦めします.FoodProviderをFormatCurrency
に設定してDefaultCellStyleのFormatProviderをフォーマットして設定する必要があります。
private void OnCellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if (e.ColumnIndex == this.columnValue.Index)
{
... (check for null value as described above)
else
{
e.Value = String.Format(e.Value, e.CellStyle.FormatProvider);
e.FormattingApplied = true;
TextBoxの代わりにNumericBoxを使用し、DataGridでTextColumnではなくNumericColumnを使用することを検討する必要があります。数値固有のコントロールは、必要なものを正確に行うように設計されています。 –
ありがとう、しかし、私はNumericBoxカスタムコントロールだと思います。私のツールボックスでは利用できません。 Visual Studio 2015を使用しています。利用できるのはnumericUpDownコントロールです。 – Zhyke
https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellformatting(v=vs.110).aspx – Crowcoder