【发布时间】:2016-06-01 23:53:05
【问题描述】:
前导零不会添加到具有 PadLeft 或 String.Format 的 DataTable 列中。
最初我将用户上传的 excel 数据复制到 Datatable。如果长度小于 8 位,我会尝试在数据表列值前面添加零,然后我必须与另一个表进行比较以匹配记录。如果我没有前导零,我在与其他数据表列匹配时会丢失这些记录。但我希望它们带有前导零,以便可以匹配它们以获得正确的结果。
例如:我在数据表中有一个“CODE”列,其值为 30500、501080、5020900、19010300 等,我希望得到类似 00030500、00501080、05020900、19010300 的结果
注意:我希望更改数据表中的数据,而不是在检索数据的 sql 查询中。 我不想要将 int 转换为字符串前导零的代码。即使我尝试过这种方式也不能解决我的问题。
我尝试了几种方法,但都没有解决。 我的代码有什么问题。它不起作用。我在How to add leading zeros in DataTable columns 的下面使用过,但仍然没有改变任何东西。不要认为这篇文章是重复的,因为我尝试了所有方法但仍然存在问题,因此在这里发布。
方法一:
foreach (DataRow row in dataExcelInputTable.Rows)
{
row["CODE"] = row["CODE"].ToString().PadLeft(8, '0');
}
dataExcelInputTable.AcceptChanges();
方法2:
foreach (DataRow drin dataExcelInputTable.Rows)
{
dr["CODE"] = String.Format("{0:00000000}", int.Parse(dr["CODE"].ToString()));
}
dataExcelInputTable.AcceptChanges();
方法 3:
int countSize = 0;
int val = 0;
foreach (DataRow row in dataExcelInputTable.Rows)
{
countSize = row["CODE"].ToString().Length;
val = int.Parse(row["CODE"].ToString());
if (countSize < 8)
{
row["CODE"] = val.ToString("D8");
//Response.Write("<br/>" + val.ToString("D8"));
}
}
dataExcelInputTable.AcceptChanges();
更新:
foreach (DataRow row in dataExcelInputTable.Rows)
{
if (row["CODE"].ToString().Length < 8)
{
row["CODE"] = row["CODE"].ToString().PadLeft(8, '0');
}
Response.Write("<br/>" + row["CODE"]);
}
dataExcelInputTable.AcceptChanges();
现在它在下面打印,它没有在前面填充零。
9040100 (
10020300 (=8) , 10030300 (=8) , 11010100 (=8)
【问题讨论】:
-
检查数据列的大小(在具有数据类型的数据表中)。
-
请参考我的最新更新。输出它打印
-
嗨,Sami,我发现“CODE”列的数据类型是 Double。你这是导致问题的原因吗?如果我将其更改为字符串,它会起作用吗?
标签: c# asp.net .net datatable oledb