У меня есть таблица с двумя столбцами Описание и Стоимость. Мне нужно объединить вторую строку с первой, если Cost = 0, что я сделал. Тем не менее, если 3-я строка также имеет значение Cost = 0, мне нужно ее пропустить (здесь я терплю неудачу).
Я уже написал следующий код, и он работает, но он не пропускает вторую стоимость = 0 и перейти к следующей строке с Cost! = 0.
Я пытался с таймером, но он не работает. В то время как я также работаю над решением, кто-нибудь сможет помочь с тем, чего мне не хватает, пожалуйста?
DataTable DT = new DataTable();
DT.Columns.Add("Desc", typeof(string));
DT.Columns.Add("Cost", typeof(int));
DT.Rows.Add(new object[] { "Line 1", 200 });
DT.Rows.Add(new object[] { "Line 2", 0 });
DT.Rows.Add(new object[] { "Line 3", 0 });
DT.Rows.Add(new object[] { "Line 4", 0 });
DT.Rows.Add(new object[] { "Line 5", 500 });
DT.Rows.Add(new object[] { "Line 6", 0 });
DT.Rows.Add(new object[] { "Line 7", 0 });
DT.Rows.Add(new object[] { "Line 8", 0 });
DT.Rows.Add(new object[] { "Line 9", 0 });
DT.Rows.Add(new object[] { "Line 10", 3500 });
DT.Rows.Add(new object[] { "Line 11", 0 });
DataTable dt2 = DT.Clone();
string Desc = "";
int Cost = 0;
int newCost = 0;
int rowNumber = 0;
int counter = 0;
foreach (DataRow row in DT.AsEnumerable())
{
string newDesc = row.Field<string>("Desc");
newCost = row.Field<int>("Cost");
if ((++rowNumber == 1) || (newCost == 0))
{
if (counter <= 2)//not working
{
Desc += " " + newDesc;
counter = 0;
}
Cost += newCost;
}
else
{
dt2.Rows.Add(new object[] { Desc, Cost });
Cost = newCost;
Desc = newDesc;
}
counter++;
}
if (Cost != 0)
{
dt2.Rows.Add(new object[] { Desc, Cost });
}
foreach (DataRow a in dt2.Rows)
{
Console.WriteLine(a["Desc"] + " " + a["Cost"]);
// Current result - not GOOD
//Line 1 Line 2 Line 3 Line 4 200
//Line 5 Line 6 Line 7 Line 8 Line 9 500
//Line 10 Line 11 3500
//The right result
//Line 1 Line 2 200
//Line 5 Line 6 500
//Line 10 Line 11 3500
}