Не знаю, решена ли проблема. Это мое предложение по решению проблемы. Я бы сделал go от последней строки до первой, потому что задача состоит в том, чтобы получить последнее значение из каждого столбца, а затем l oop может быть ошибочным окончанием sh, как если бы вы go из сверху вниз таблицы. Но это, я думаю, также зависит от данных в таблице.
DataTable temp = yourTable; // the original table
DataTable temp2 = new DataTable();
object[] lastNonNullValues = new object[temp.Columns.Count];
// Index of the last row.
int lastRow = temp.Rows.Count - 1;
// Get from the last row to the first
for (int i = lastRow; i >= 0; i--)
{
// Don't know if necessary but if all columns has an value -> finish.
if (lastNonNullValues.All(x => x != null)) break;
DataRow row = temp.Rows[i];
for (int j = 0; j < temp.Columns.Count; j++)
{
// Continue if some value was written
if (lastNonNullValues[j] != null) continue;
// None of this condition should be true, thas why should change from || to &&
if (row[j] != null && row[j] != DBNull.Value && !string.IsNullOrWhiteSpace(row[j].ToString()))
{
lastNonNullValues[j] = row[j];
}
}
}
temp2.Rows.Add(lastNonNullValues);
Примечание:
Решение Rufus L также должно работать при изменении оператора if от или до и-соединение .