Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#数据表精度十进制_C#_Datatable_Decimal - Fatal编程技术网

C#数据表精度十进制

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); 如何为该列指定十进

我有以下代码向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;