我有一个方法来检查空的datarows。然而,由于我需要使用一个值来检查 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;
}
}
你可以修改 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
方法返回 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))