如何在 DataTable 的 .net C# 中将 0 转换为 '-'
How can I Convert 0 to '-' in .net C# in A DataTable
我得到一个 table,其中有几列包含数字。我想要的是在数字为 0 的情况下显示“-”。我尝试在前端执行此操作,但效果不佳。将数据放入 DataTable 中,然后当我尝试直接转换它时,它不是以字符形式转换,而是向我显示 ascii 值 - 45 而不是“-”。
然后我尝试创建一个新数据Table,但这也不起作用,并抛出与数据类型相关的错误。
这是我尝试过的:
DataTable kk = _sqlRepository.GetDataTable(str);
DataTable dd = kk.Clone();
for (int i = 0; i < dd.Rows.Count; i++)
{
dd.Columns[i].DataType = typeof(String);
}
foreach (DataRow row in kk.Rows)
{
dd.ImportRow(row);
}
但这在转换 Table 列时不起作用。
知道如何在 C# 中使用相同的 DataTable 或任何它会非常棒的东西。
如果需要任何进一步的详细信息或信息,请告诉我。
提前致谢。
首先,您的 Dto(数据传输对象)的 属性 应包含十进制表示值(例如 5.67)和“-” 类型字符串.
示例:
public class OrderDto
{
public DateTime OrderDate { get; set; }
//public decimal OrderValue { get; set; }
public string OrderValue { get; set; }
}
你的逻辑应该是这样的:
if (reader["order_amount"].ToString() == "0")
{
order.OrderValue = "-";
}
else
{
order.OrderValue = reader["order_amount"].ToString();
}
完整示例:
try
{
var conString = "Data Source=(local);Persist Security Info=False;Initial Catalog=myDatabase;Integrated Security=SSPI";
using (SqlConnection myConnection = new SqlConnection(conString))
{
var qry = "SELECT order_date, order_amount FROM myTable";
SqlCommand cmd = new SqlCommand(qry, myConnection);
myConnection.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var order = new OrderDto();
order.OrderDate = Convert.ToDateTime(reader["order_date"].ToString());
if (reader["order_amount"] != DBNull.Value)
{
if (reader["order_amount"].ToString() == "0")
{
order.OrderValue = "-";
}
else
{
order.OrderValue = reader["order_amount"].ToString();
}
}
Console.WriteLine(JsonSerializer.Serialize(order));
}
myConnection.Close();
}
}
}
catch (SqlException ex)
{
Console.WriteLine($"{ex}");
}
}
结果:
{"OrderDate":"2018-01-31T00:00:00","OrderValue":"2"}
{"OrderDate":"2018-05-25T00:00:00","OrderValue":"-"}
{"OrderDate":"2018-05-28T00:00:00","OrderValue":"-"}
{"OrderDate":"2018-05-28T00:00:00","OrderValue":"-"}
{"OrderDate":"2018-05-28T00:00:00","OrderValue":"-"}
{"OrderDate":"2018-05-28T00:00:00","OrderValue":"-"}
我得到一个 table,其中有几列包含数字。我想要的是在数字为 0 的情况下显示“-”。我尝试在前端执行此操作,但效果不佳。将数据放入 DataTable 中,然后当我尝试直接转换它时,它不是以字符形式转换,而是向我显示 ascii 值 - 45 而不是“-”。
然后我尝试创建一个新数据Table,但这也不起作用,并抛出与数据类型相关的错误。 这是我尝试过的:
DataTable kk = _sqlRepository.GetDataTable(str);
DataTable dd = kk.Clone();
for (int i = 0; i < dd.Rows.Count; i++)
{
dd.Columns[i].DataType = typeof(String);
}
foreach (DataRow row in kk.Rows)
{
dd.ImportRow(row);
}
但这在转换 Table 列时不起作用。 知道如何在 C# 中使用相同的 DataTable 或任何它会非常棒的东西。 如果需要任何进一步的详细信息或信息,请告诉我。
提前致谢。
首先,您的 Dto(数据传输对象)的 属性 应包含十进制表示值(例如 5.67)和“-” 类型字符串.
示例:
public class OrderDto
{
public DateTime OrderDate { get; set; }
//public decimal OrderValue { get; set; }
public string OrderValue { get; set; }
}
你的逻辑应该是这样的:
if (reader["order_amount"].ToString() == "0")
{
order.OrderValue = "-";
}
else
{
order.OrderValue = reader["order_amount"].ToString();
}
完整示例:
try
{
var conString = "Data Source=(local);Persist Security Info=False;Initial Catalog=myDatabase;Integrated Security=SSPI";
using (SqlConnection myConnection = new SqlConnection(conString))
{
var qry = "SELECT order_date, order_amount FROM myTable";
SqlCommand cmd = new SqlCommand(qry, myConnection);
myConnection.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
var order = new OrderDto();
order.OrderDate = Convert.ToDateTime(reader["order_date"].ToString());
if (reader["order_amount"] != DBNull.Value)
{
if (reader["order_amount"].ToString() == "0")
{
order.OrderValue = "-";
}
else
{
order.OrderValue = reader["order_amount"].ToString();
}
}
Console.WriteLine(JsonSerializer.Serialize(order));
}
myConnection.Close();
}
}
}
catch (SqlException ex)
{
Console.WriteLine($"{ex}");
}
}
结果:
{"OrderDate":"2018-01-31T00:00:00","OrderValue":"2"}
{"OrderDate":"2018-05-25T00:00:00","OrderValue":"-"}
{"OrderDate":"2018-05-28T00:00:00","OrderValue":"-"}
{"OrderDate":"2018-05-28T00:00:00","OrderValue":"-"}
{"OrderDate":"2018-05-28T00:00:00","OrderValue":"-"}
{"OrderDate":"2018-05-28T00:00:00","OrderValue":"-"}