我有一个数据表,此数据表中的一些列的值为double类型。
这里的一切都很好,但是当我得到0.0000005
的值时,它会显示一些5E-9指数值。
我需要显示相同的值而不是指数值。
我应用了这样的文化信息,但它无法帮助我:
NumberFormatInfo numberFormat = new NumberFormatInfo();
numberFormat.NumberGroupSeparator = string.Empty;
numberFormat.NumberDecimalDigits = 9;
CultureInfo info = new CultureInfo(CultureInfo.CurrentCulture.Name);
info.NumberFormat = numberFormat;
//data table having data
targetTable.Locale=info;
可以帮助我吗?
谢谢,
莫汉
答案 0 :(得分:4)
DataTable.Locale
的文档没有说明设置数字格式;它说:
获取或设置用于比较表中字符串的语言环境信息。
所以它可能不会做你期望它做的事。
如果您要自动生成列,则可能需要将值存储为DataTable
中的字符串,以便您可以指定格式。另一个选项是附加到AutoGeneratingColumn
事件以设置自定义列属性:
摘自MSDN:
private void dataGrid1_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
{
// Modify the header of the Name column.
if (e.Column.Header.ToString() == "Name")
e.Column.Header = "Task";
// Replace the DueDate column with a custom template column.
if (e.PropertyName == "DueDate")
{
// Create a new template column.
DataGridTemplateColumn templateColumn = new DataGridTemplateColumn();
templateColumn.Header = "Due Date";
templateColumn.CellTemplate = (DataTemplate)Resources["dueDateCellTemplate"];
templateColumn.CellEditingTemplate = (DataTemplate)Resources["dueDateCellEditingTemplate"];
templateColumn.SortMemberPath = "DueDate";
// ...
// Replace the auto-generated column with the templateColumn.
e.Column = templateColumn;
}
// Cancel AutoGeneration of all boolean columns.
if (e.PropertyType == typeof(bool))
e.Cancel = true;
if (e.PropertyName == "ValueField")
{
(e.Column as DataGridTextColumn).Binding.StringFormat = "N5";
}
}
我会说自动生成列是快速建立网格原型的好方法,但我通常最终直接配置列来指定数字格式等。
答案 1 :(得分:1)
使用Windows窗体DataGrid
,您可以使用MSDN上How to: Format Data in the Windows Forms DataGridView Control上描述的技术。
例如:
dataGridView1.Columns["YourColumn"].DefaultCellStyle.Format = "F9";
表示小数分隔符后面的固定小数位数。
要了解"F9"
的含义以及其他字符串的有效性,请阅读Standard Numeric Format Strings和Custom Numeric Format Strings。存在DateTime
,TimeSpan
,枚举类型等的Simmilar格式字符串。