【问题标题】:How to Edit DataTable Column Value如何编辑 DataTable 列值
【发布时间】:2020-04-17 14:57:25
【问题描述】:

Excel 列名可能包含尾随空格,如果由于空格导致列不匹配,则会出现异常。

我正在寻找方法来处理数据表中列名中的尾随空格。

foreach (DataRow row in caseTable.Rows)
{
    foreach (DataColumn column in caseTable.Columns)
    {
        if (!(string.isNullOrEmpty(column.toString())))
        {
            //Cannot assign value to 'column' because it is in a 'foreach iteration variable'
            column = column.ToString().TrimStart().TrimEnd(); 
            trimmed = 1;
        }
    }
    while (trimmed == 0) ;
}

...

//errored out due to 'Excel.firstName' value not existing in DataTable due to trailing spaces
if (row[Excel.firstName].ToString().Trim() != "")
{
    caseEntity.Attributes[Case.firstName] = row[Excel.firstName];
}

【问题讨论】:

  • 您应该使用正确的方法,例如string.IsNullOrEmptystring.IsNullOrWhitespace
  • 谢谢 Michal,我已经改了。

标签: c# excel trim


【解决方案1】:

你的代码有两个错误:

  1. 您正在使用 foreach 迭代序列并尝试修改迭代的项目;因此,抛出的异常。
  2. 您正在尝试替换列对象而不是其名称。

此外,您正在滥用 ToString,并且正如 Michal Turczyn 所述,您没有使用明确设计用于测试空字符串或空字符串的内置 String 方法。

您可以尝试将内部循环中的代码替换为

var oldName = column.ColumnName;
if (!string.IsNullOrEmpty(oldName))
{
    var newName = oldName.Trim();
    if (newName != oldName)
    {
        column.ColumnName = newName;
        trimmed = 1;
    }
}

从这个替换代码可以看出:

  1. 您应该读/写ColumnName 属性,而不是使用ToString
  2. 您可以避免使用Trim 依次调用TrimStartTrimEnd(以任何顺序)。
  3. 您应该使用string.IsNullOrEmpty 而不是检查空字符串。
  4. 通过声明 oldNamenewName,您可以将列名跟踪为已修剪,只有在确实如此时。

此外,如果您仅将值 01 分配给 trimmed 变量,那么您应该考虑将其声明为 bool 并分配 。 否则,您可以将 trimmed 变量保留为数字,但增加其值而不是始终分配相同的常量 (1)。

如果您要更改的不是列名,而是该列当前行中的单元格值,那么您缺少获取(并稍后设置)单元格值(您正在评估并尝试仅更改列名)。 在这种情况下,内部循环代码变为:

var oldValue = row[column] as string;
if (!string.IsNullOrEmpty(oldValue))
{
    var newValue = oldValue.Trim();
    if (newValue != oldValue)
    {
        row[column] = newValue;
        trimmed = 1;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-20
    • 1970-01-01
    • 2013-10-11
    相关资源
    最近更新 更多