我有这个代码将新列添加到datatable:
DataColumn col = new DataColumn("column", typeof(decimal)); col.Caption = "Column"; mytable.Columns.Add(col);
如何为此列指定小数精度,以便值始终采用我希望的格式?
答案 0 :(得分:1)
你做不到。但是,您可以使用String.Format
函数从表中检索值来格式化值:
String.Format("{0:0.##}", (Decimal) myTable.Rows[rowIndex].Columns[columnIndex]);
答案 1 :(得分:1)
我自己也有同样的问题,我通过在应用启动时加载整个架构来修复它,然后根据我的需要从架构中引用列信息。
我只有一个Visual Basic示例,但希望转换为C#
非常容易' in whatever class you do your database communication:
Private _database As SqlDatabase
Private Shared _schema As DataTable
Sub New()
' or however you handle the connection string / database creation
Dim connectionString as String = GetConnectionString()
_database = New SqlDatabase(connectionString)
RetrieveSchema()
End Sub
Private Function RetrieveSchema() as DataTable
If _schema Is Nothing Then
Using connection As SqlConnection = _database.CreateConnection()
connection.Open()
_schema = connection.GetSchema("Columns")
End Using
End If
return _schema
End Function
Public Function GetColumnInformation(tableName As String, columnName As String) as DataRow
Dim firstMatchingRow as DataRow = (
From row In _schema.Rows _
Where (
row("TABLE_NAME") = tableName AndAlso row("COLUMN_NAME") = columnName)
)).FirstOrDefault()
Return firstMatchingRow
End Function
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)
答案 2 :(得分:0)
这个答案是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;