Knowledged Ответов: 1

Сократите время, необходимое для заполнения данных в ультрасетке


lastbudget и lastactual-это оба списка

Эти списки заполняются 2 колонки в infragistics ultragrid

- Превфи
- Actual_c

*Таким образом, сетка уже определила источник данных. Эти 2 столбца я добавил программно в сетку, которая имеет источник данных.*



**(dgvBudget имя ultragrid)**

int rowIndex = dgvBudget.Rows.Count;
    
    
    if (half == "Second Half Budget")
    {
        for (int i = 6; i < rowIndex; i++)
        {
            var row = dgvBudget.Rows[i];
            row.Cells["PrevFY"].Value = lastbudget[i];
            row.Cells["Actual_c"].Value = lastactual[i];
        }
        for (int i = 0; i < 6; i++)
        {
            var row = dgvBudget.Rows[i];
            row.Cells["PrevFY"].Value = lastactual[i];
            row.Cells["Actual_c"].Value = 0;
        }
    }
    else
    {
        for (int i = 0; i < rowIndex; i++)
        {
            var row = dgvBudget.Rows[i];
            row.Cells["PrevFY"].Value = lastbudget[i];
            row.Cells["Actual_c"].Value = lastactual[i];
        }
    }


Моя цель состоит в том, чтобы создать новый источник данных и импортировать привязанные данные в datagridview с 3 новыми столбцами, которые я создал, чтобы сократить MS при выполнении.

На данный момент это занимает 8-10 секунд, чтобы выполнить

private void bringPreviousData()
    {
        Stopwatch stopwatch = Stopwatch.StartNew();
        List<string> lastactual = new List<string>();
        List<string> lastbudget = new List<string>();
        Control cmbBudgetCode = csm.GetNativeControlReference("17dd127e-7b02-48e9-a7bb-e98164aea713");
        EpiDataView bhView = (EpiDataView)(oTrans.EpiDataViews["GLBudgetHd"]);
        if (!dgvBudget.DisplayLayout.Bands[0].Columns.Exists("PrevFY"))
        {
            dgvBudget.DisplayLayout.Bands[0].Columns.Add("PrevFY", "Previous FY Budgeted");
            dgvBudget.DisplayLayout.Bands[0].Columns["PrevFY"].Style = Infragistics.Win.UltraWinGrid.ColumnStyle.Currency;
        }

        if (!dgvBudget.DisplayLayout.Bands[0].Columns.Exists("FiscalMonth"))
        {
            dgvBudget.DisplayLayout.Bands[0].Columns.Add("FiscalMonth", "Month");
            SetColumnReadOnly("FiscalMonth", true);
        }
        else
        {
            string[] monthNames = { "April", "May", "June", "July", "August", "September", "October", "November", "December", "January", "February", "March" };
            for (int i = 0; i < monthNames.Length; i++)
            {
                dgvBudget.Rows[i].Cells["FiscalMonth"].Value = monthNames[i];
            }
        }

        string half = cmbBudgetCode.Text;
        lastactual = GetLastActual(half);
        lastbudget = GetLastBudget(half);
        int rowIndex = dgvBudget.Rows.Count;
        if (half == "Second Half Budget")
        {
            for (int i = 6; i < rowIndex; i++)
            {
                var row = dgvBudget.Rows[i];
                row.Cells["PrevFY"].Value = lastbudget[i];
                row.Cells["Actual_c"].Value = lastactual[i];
            }
            for (int i = 0; i < 6; i++)
            {
                var row = dgvBudget.Rows[i];
                row.Cells["PrevFY"].Value = lastactual[i];
                row.Cells["Actual_c"].Value = 0;
            }
        }
        else
        {
            for (int i = 0; i < rowIndex; i++)
            {
                var row = dgvBudget.Rows[i];
                row.Cells["PrevFY"].Value = lastbudget[i];
                row.Cells["Actual_c"].Value = lastactual[i];
            }
        }

        decimal total = 0m;
        foreach (UltraGridRow row in dgvBudget.Rows)
        {
            total += Convert.ToDecimal(row.Cells["PrevFY"].Value);
        }
        if (Config.typeofAccount != "Overtime")
        {
            if (GetAcctType(bhView.CurrentDataRow["SegValue1"].ToString()))
            {
                nbrPrevStatTotal.Value = total;
            }
            else
            {
                nbrPrevTotal.Value = total;
            }
        }
        else
        {
            nbrPrevTotal.Value = total;
        }
        stopwatch.Stop();
        MessageBox.Show(stopwatch.ElapsedMilliseconds.ToString());
    }


Итак, на данный момент этот код делает следующее

1. захватывает 2 списка данных
2. Затем добавляет 2 колонки если они отсутствуют (prevFy, и отчетный месяц)
3. затем заполняет ultragridview текущим источником данных плюс мои добавленные данные и столбцы
4. Затем суммирует значения в ячейках для отображения в текстовом поле

Я пожалуйста иметь некоторую помощь, как я могу ускорить это, потому что сейчас все очень нравится, это так sloooooooooooow спасибо!

Что я уже пробовал:

Мне нужно попробовать использовать источник привязки, редактируя источник данных, а затем показывая отредактированный источник данных. на сетке

F-ES Sitecore

Если вы добавляете тысячи элементов, то это всегда будет медленно, и вы ничего не можете с этим поделать (однако проверьте, есть ли у компонента, к которому вы добавляете, режим массового обновления, в котором он не перерисовывается до тех пор, пока не будут добавлены все элементы).

Если это не так, то вам нужно точно выяснить, какая операция медленная. У нас нет ваших данных, поэтому мы не можем сделать это за вас. Используйте класс Stopwatch для определения времени разделов кода, чтобы попытаться определить узкое место. Как только он будет найден, выясните, почему он медленный и есть ли что-нибудь, что вы можете сделать, чтобы исправить его.

Knowledged

это всего лишь 12 рядов. Я использую студия объединена с системой epicor, чтобы вытащить эти данные https://prnt.sc/pex6m0

Это всего лишь 12 строк, а затем они добавляются в список, который я затем делаю новым столбцом вдоль сетки и циклически перебираю по списку, устанавливая ячейки.

1 Ответов

Рейтинг:
2

Gerry Schmitz

Если вы создадите правильный источник данных (1 коллекция), свяжете его с сеткой, то "сетка" сможет правильно "виртуализировать" данные и ускорить обработку.

В то время как "взлом" сетки может показаться менее трудоемким и более увлекательным, вы победили любые специальные функции, которые сетка может использовать для ускорения обработки.

Виртуализация - справка по Infragistics WPF™ [^]


Knowledged

это всего лишь 12 рядов. Я использую студия объединена с системой epicor, чтобы вытащить эти данные https://prnt.sc/pex6m0

Это всего лишь 12 строк, а затем они добавляются в список, который я затем делаю новым столбцом вдоль сетки и циклически перебираю по списку, устанавливая ячейки.