如何使用现有的 for 循环实现空数据行检查

How to implement empty datarow check with an existing for-loop

我有一种检查空数据行的方法。但是,由于我需要使用 for-looprowcolumn 值来检查值,我还没有找到一种方法来集成以下方法来检查空行以防止不必要的检查。

运行函数

int headerRow = getColumnHeaderRowNumber(dt);

int firstDataRow = headerRow + 1;

for (int dataRow = firstDataRow; dataRow < dt.Rows.Count; dataRow++)
{
    //using known column header and data row value, 
    //loops each column to match a column title, maintaining on current row
}

检查空数据行

if (!(AreAllColumnsEmpty(row)))
{
    //executes if row is not empty
}

bool AreAllColumnsEmpty(DataRow dr)
{
    if (dr == null)
    {
        return true;
    }
    else
    {
        foreach (var value in dr.ItemArray)
        {
            if (value.ToString().Trim() != null && value.ToString().Trim() != "")
            {
                return false;
            }
        }
        return true;
    }
}

您可以修改 AreAllColumnsEmpty 方法,使其可重复使用,如下所示:

    static bool AreAllColumnsEmpty(DataRow dr, out Dictionary<string, string> nameValuePair)
    {
        // contains non-empty columns name and value
        nameValuePair = new Dictionary<string, string>();

        if (dr == null)
        {
            return true;
        }
        else
        {
            DataColumnCollection columns = dr.Table.Columns;
            int columnIndex = 0;

            foreach (var value in dr.ItemArray)
            {
                string valueToString = value.ToString().Trim();
                if (!string.IsNullOrEmpty(valueToString))
                {
                    nameValuePair.Add(columns[columnIndex].ColumnName, valueToString);
                }
                columnIndex++;
            }

            return nameValuePair.Count == 0;
        }
    }

AreAllColumnsEmpty 方法循环遍历行的每一列(单元格、字段)。非空列像名称-值对一样存储在 Dictionary<string, string> nameValuePair 中。 AreAllColumnsEmpty 方法 returns bool 值指示行是否为空并且它具有 Dictionary<string, string> nameValuePair 作为输出参数。

AreAllColumnsEmpty 方法是静态的,但不一定是。 Dictionary<string, string> nameValuePair 将在每次方法 AreAllColumnsEmpty 执行时重置。

    if (value.ToString().Trim() != null && value.ToString().Trim() != "")

取代
    string valueToString = value.ToString().Trim();
    if (!string.IsNullOrEmpty(valueToString))