gymcode
gymcode

Reputation: 4623

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

I have a method to check for empty datarows. However, due to values I require to check using a for-loop with row and column values, I have yet to find a way to integrate the following method which checks for empty rows to prevent unnecessary checks.

Running function

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
}

Check empty datarow

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

Upvotes: 1

Views: 524

Answers (1)

Marko Radivojević
Marko Radivojević

Reputation: 448

You could modify AreAllColumnsEmpty method so it becomes reusable, like this:

    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 method loops through each column (cell, field) of the row. Non-empty columns are stored in Dictionary<string, string> nameValuePair like name-value pairs. AreAllColumnsEmpty method returns bool value which indicates if row is empty and it has Dictionary<string, string> nameValuePair as output parameter.

AreAllColumnsEmpty method is static, but it doesn't need to be. Dictionary<string, string> nameValuePair will be reset every time method AreAllColumnsEmpty executes.

Line

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

is replaced by

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

Upvotes: 1

Related Questions