【问题标题】:How to implement empty datarow check with an existing for-loop如何使用现有的 for 循环实现空数据行检查
【发布时间】:2020-08-10 04:45:54
【问题描述】:

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

运行函数

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;
    }
}

【问题讨论】:

    标签: c# for-loop datatable datarow


    【解决方案1】:

    您可以修改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&lt;string, string&gt; nameValuePair 中,就像名称-值对一样。 AreAllColumnsEmpty 方法返回 bool 值,该值指示行是否为空,并且它有 Dictionary&lt;string, string&gt; nameValuePair 作为输出参数。

    AreAllColumnsEmpty 方法是静态的,但不是必须的。每次方法 AreAllColumnsEmpty 执行时,Dictionary&lt;string, string&gt; nameValuePair 都会被重置。

    线

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

    被替换为

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

    【讨论】:

    • 谢谢,我会尝试解决方案。我可以知道为什么我们返回nameValuePair.Count == 0吗?
    • 当然。 nameValuePair.Count == 0 表示给定行中的所有列(单元格、字段)都是空的。非空列存储在Dictionary&lt;string, string&gt; nameValuePair 中。如果比较nameValuePair.Count == 0 为真,则方法AreAllColumnsEmpty 将返回true。如果比较nameValuePair.Count == 0 为假,换句话说,如果Dictionary&lt;string, string&gt; nameValuePair 包含数据,则意味着存在非空列并且方法AreAllColumnsEmpty 将返回false。它是if (nameValuePair.Count == 0) { return true; } else { return false; } 的缩写。
    猜你喜欢
    • 1970-01-01
    • 2020-02-04
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-15
    相关资源
    最近更新 更多