前导零没有使用PadLeft或String.Format添加到DataTable列。
最初我将用户上传的excel数据复制到Datatable。如果长度小于8位,我试图在数据表列值前面添加零,之后我必须与另一个表进行比较以匹配记录。如果我没有前导零,我会在与其他数据表列匹配时丢失这些记录。但我希望它们与前导零一起使用,以便匹配它们以获得正确的结果。
Ex:我有一个专栏" CODE"在数据表中,值为30500,501080,5020900,19010300等,并希望得到我的结果,如00030500,00501080,05020900,19010300
注意:我想更改数据表中的数据,而不是在sql查询中检索数据。 我不想要将int转换为字符串前导零的代码。即使我以这种方式尝试也没有解决我的问题。
我尝试了几种方法,但它没有解决。 我的代码有什么问题。它不能正常工作。我在How to add leading zeros in DataTable columns下面使用但仍未改变任何内容。不要认为这个帖子是重复的,因为我尝试了所有方法,但问题仍然存在,因此发布在这里。
方法1:
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(&lt; 8),9070100(&lt; 8),9090200(&lt; 8),9090300(&lt; 8)
10020300(= 8),10030300(= 8),11010100(= 8)
答案 0 :(得分:1)
我试着在我的最后得到预期的输出......下面是一个测试代码
// Set options
$from_number="XXXXXXXXXX";
$start_date="2016-05-01";
$end_date="2016-05-31";
// Build the option array
$get_iterator_options = array(
'from' => $from_number,
'DateSent' => $start_date,
'DateSent' => $end_date
);
// Make the call with our options
foreach ($client->account->message->getIterator(
0,
50,
$get_iterator_options
) as $message
) {
$msg_ids[] = $message->sid; //
}
echo count($msg_ids);
// dt.Rows [0] [0]值为00030500
答案 1 :(得分:0)
最后得到了一个解决方案,谢谢Sami关于Datatype的想法。我发现Datatype是double,但是我需要使用PadLeft方法使用字符串来填充左边的零。 因为从excel表填充数据后我无法更改数据表的数据类型。我克隆到一个新的Datatable,然后将其数据类型更改为string。以下是示例代码。
dtCloned = dataExcelInputTable.Clone();
dtCloned.Columns[1].DataType = typeof(System.String); // clone the datatble and make a column datatype to string
foreach (DataRow row in dataExcelInputTable.Rows)
{
dtCloned.ImportRow(row);
}
foreach (System.Data.DataRow row in dtCloned.Rows)
{
row["CODE"] = row["CODE"].ToString().PadLeft(8, '0');
Response.Write("<br/>" + row["CODE"]);
}
dtCloned.AcceptChanges();
这是按预期工作的。但我正在寻找克隆以外的任何直接简单方法?我在https://msdn.microsoft.com/en-us/library/dd260048%28v=vs.110%29.aspx下面尝试过,但它没有用。给我一个错误“方法'ToString'没有重载需要1个参数”。
string fmt = "00000000.##";
foreach (System.Data.DataRow row in dataExcelInputTable.Rows)
{
row["CODE"] = row["CODE"].ToString(fmt);
Response.Write("<br/>" + row["CODE"]);
}