2017-06-23 16 views
1

私は、テキストボックスの値を通貨にフォーマットする関数を持っています。私はTextbox Leaveイベントでこれを行いました。Datagridview textbox leaveイベント

private void txtSellingPrice_Leave(object sender, EventArgs e) 
{ 
    txtSellingPrice.Text = FormatCurrency(txtSellingPrice.Text); 
} 

例:ユーザーが100を入力すると、出力は100ドルになります。

私の質問は、私はどのようにdatagridviewセルでそれを行うのですか?私は既に編集コントロールにleaveイベントを追加しようとしました。私もDefaultCellStyle.Format = "C2"を試しましたが、これは動作しますが、ユーザーが現在の値を変更すると、$ 100.00が50に変更されます。出力は$ 50.00になります。ありがとう。

+0

TextBoxの代わりにNumericBoxを使用し、DataGridでTextColumnではなくNumericColumnを使用することを検討する必要があります。数値固有のコントロールは、必要なものを正確に行うように設計されています。 –

+0

ありがとう、しかし、私はNumericBoxカスタムコントロールだと思います。私のツールボックスでは利用できません。 Visual Studio 2015を使用しています。利用できるのはnumericUpDownコントロールです。 – Zhyke

+0

https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.cellformatting(v=vs.110).aspx – Crowcoder

答えて

0

簡単な方法は、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; 
関連する問題