Reputation: 4623
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
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