C#数据表精度十进制
我有以下代码向datatable添加新列: DataColumn col = new DataColumn("column", typeof(decimal)); col.Caption = "Column"; mytable.Columns.Add(col); DataColumn col=新的DataColumn(“column”,typeof(decimal)); col.Caption=“Column”; mytable.Columns.Add(col);C#数据表精度十进制,c#,datatable,decimal,C#,Datatable,Decimal,我有以下代码向datatable添加新列: DataColumn col = new DataColumn("column", typeof(decimal)); col.Caption = "Column"; mytable.Columns.Add(col); DataColumn col=新的DataColumn(“column”,typeof(decimal)); col.Caption=“Column”; mytable.Columns.Add(col); 如何为该列指定十进
如何为该列指定十进制精度,使值始终采用我希望的格式?您不能。但是,使用
String.format
函数从表中检索值时,可以对其进行格式化:
String.Format("{0:0.##}", (Decimal) myTable.Rows[rowIndex].Columns[columnIndex]);
我自己也遇到了同样的问题,我通过在应用程序启动时加载整个模式,然后根据需要从模式中引用列信息来修复它 我只有一个VisualBasic示例,但希望它很容易翻译成C# 安装程序 用法 这个答案是NullVoxPopuli答案的C版本。因为我需要这个,我想我会和大家分享它,节省一些时间 它将模式加载到DataColumnCollection中,然后将其添加到新的DataTable中。 如果要重用列定义,可以将这两部分拆分为函数
var ConnectionString = "bla";
DataColumnCollection Columns;
using (SqlConnection con = new SqlConnection(ConnectionString))
{
con.Open();
using(SqlCommand command = new SqlCommand("select top 1 * from trades", con))
{
using (var r = command.ExecuteReader())
{
using(var dt = new DataTable())
{
dt.Load(r);
Columns = dt.Columns;
}
}
}
con.Close();
}
DataTable DataTable = new DataTable();
while(Columns.Count > 0)
{
DataColumn c = Columns[0];
c.Table.Columns.Remove(c);
DataTable.Columns.Add(c);
}
Columns = DataTable.Columns;
// use DataTable;
格式化应该由您使用的任何UI处理,DataTable不应该与格式化有关,而应该与data.Ok有关。这意味着我有2个选项:1)在sql中创建表时,使用数据定义以精度限制十进制数据类型2)使用Math.Round()或String.Format()显示。@Blablablaster:如何使用数据定义以精度限制十进制数据类型??创建表mytab(somefield decimal(18,2))若你们的意思是在数据库中,那个么是的,你们可以。
Dim columnInformation As DataRow = Dal.GetColumnInformation(tableName, columnName)
' find the precision
Dim precision = columnInformation("NUMERIC_PRECISION")
Dim scale = columnInformation("NUMERIC_SCALE")
' convert the decimal to the column's format
' e.g.: 2.345 with a scale of 2 would result in
' 2.35
value = Decimal.Round(value, scale)
var ConnectionString = "bla";
DataColumnCollection Columns;
using (SqlConnection con = new SqlConnection(ConnectionString))
{
con.Open();
using(SqlCommand command = new SqlCommand("select top 1 * from trades", con))
{
using (var r = command.ExecuteReader())
{
using(var dt = new DataTable())
{
dt.Load(r);
Columns = dt.Columns;
}
}
}
con.Close();
}
DataTable DataTable = new DataTable();
while(Columns.Count > 0)
{
DataColumn c = Columns[0];
c.Table.Columns.Remove(c);
DataTable.Columns.Add(c);
}
Columns = DataTable.Columns;
// use DataTable;