Использую Syncfusion GridControl в качестве таблицы
if (labelCard.Text.Length != 0)
{
for (var i = 1; i <= checkGrid.RowCount; i++)
{
for (var j = 1; j <= checkGrid.Model.ColCount; j++)
{
//сверка со списком исключений
foreach (var a in noPromoList.Where(a => dbList.ContainsKey(a)))
{
dbList[a] = 0;
}
var art = checkGrid[i, 7].Text;
var val = 0;
if (dbList.ContainsKey(art))
{
val = dbList[art];
}
var del = (double)val / 5;
var total = Convert.ToInt32(Math.Truncate(del));
var part = Convert.ToInt32((del - total) * 5);
var podarok = total;
var sellCount = Convert.ToInt32(checkGrid[i, 2].CellValue);
//если больше 5 в позиции
if (result.ContainsKey(art) && result[art] >= 5)
{
if (sellCount <= total)
{
podarok = Convert.ToInt32(checkGrid[i, 2].CellValue);
part = Convert.ToInt32((del - podarok) * 5);
}
else
{
val = result[art] - total;
del = (double)val / 5;
total = Convert.ToInt32(Math.Truncate(del));
part = Convert.ToInt32((del - total) * 5);
podarok = total;
}
foreach (var a in noPromoList.Where(a => result.ContainsKey(a)))
{
result[a] = 0;
}
checkGrid[i, 5].CellValue = podarok;
checkGrid.RefreshRange(GridRangeInfo.Cell(i, 5));
checkGrid[i, 6].CellType = GridCellTypeName.FormulaCell;
checkGrid[i, 6].CellValue = "=" + "(" + checkGrid[i, 2].CellValue + "*" + checkGrid[i, 4].CellValue + ")-" + Convert.ToInt32(checkGrid[i, 4].CellValue) + "*" + checkGrid[i, 5].CellValue;
checkGrid.RefreshRange(GridRangeInfo.Cell(i, 6));
checkGrid[i, 6].ResetFormulaTag();
checkGrid[i, 8].CellValue = part;
checkGrid[i, 9].CellValue = podarok * Convert.ToInt32(checkGrid[i, 4].CellValue);
checkGrid.Refresh();
}
//если меньше 5 в позиции
else if (result.ContainsKey(art) && result[art] < 5)
{
if (Convert.ToInt32(checkGrid[i, 2].CellValue) < total) { total = Convert.ToInt32(checkGrid[i, 2].CellValue);}
part = Convert.ToInt32(checkGrid[i, 2].CellValue) + part;
checkGrid[i, 5].CellValue = 0;
checkGrid.RefreshRange(GridRangeInfo.Cell(i, 2));
checkGrid[i, 6].CellType = GridCellTypeName.FormulaCell;
checkGrid[i, 6].CellValue = "=" + "(" + checkGrid[i, 2].CellValue + "*" + checkGrid[i, 4].CellValue + ")-" + checkGrid[i, 5].CellValue;
checkGrid.RefreshRange(GridRangeInfo.Cell(i, 6));
checkGrid[i, 6].ResetFormulaTag();
checkGrid[i, 8].CellValue = part;
checkGrid[i, 9].CellValue = podarok * Convert.ToInt32(checkGrid[i, 4].CellValue);
checkGrid.Refresh();
}
//сверка со писком скидок
foreach (var newCost in from s in saleList where checkGrid[i, j].FormattedText == s let saleXml = XDocument.Load(@"../data/menu/sale.xml") from si in (from y in saleXml.Descendants("item").Where(a => (string)a.Attribute("article") == s) select y) let co = Convert.ToInt32(checkGrid[i, 4].FormattedText) let sa = Convert.ToInt32((string) si.Attribute("sale").Value) let price = Convert.ToInt32((string) si.Attribute("cost").Value) where co >= price let sel = (co * sa / 100) select (co - sel).ToString())
{
checkGrid[i, 4].CellValue = newCost;
}
}
}
}
}
Часть блока где "else if" (там где меньше чем 5) судя по таймингу тормозит пересчет. Буквально десять строк в таблице пересчитывает секунд 10. Может кто подскажет как данный код оптимизировать. Всем откликнувшимся (по делу), СПАСИБО!
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Доброго времени сутокПодскажите, можно ли каким то образом, изменить HTML/CSS код страницы, к которой мы подключаемся? Чтобы например тот же yandex
В vs есть замечательная функция-это приконектится к веб-службе и сгенерировать все необходимое