我有一个将文本框值格式化为货币的函数。我在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 :(得分:0)
简单方法是将BindingSource分配给DataGridView,将BindingList分配给BindingSoure。将显示货币的列的默认单元格样式设置为C2。
如果您已完成此操作,则会自动为您的货币列添加/更改/删除任何单元格。
但是,如果您不想使用BindingSource,则必须自己进行格式化。使用事件DataGridViewCell.CellValidating和DataGridViewCell.CellFormating。
假设您有一个columnCurrency,其十进制值应以格式C2显示。 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
,则必须创建一个使用FormatCurrency
格式化并设置FormatProvider的FormatProvider DefaultCellStyle
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;