как очистить все данные и макет ультрагрида без его летнего макета

Есть ли способ установить источник данных UltraGrid, не удаляя его итоговую строку?

У меня есть ультрасетка gvResult в моем приложении Windows Form.

Пользователь может выбрать столбцы и отсортировать их в другой форме, а затем применить эти изменения к gvResult, нажав кнопку «Применить».

Кроме того, gvResult должен отображать сводку счетчика строк.

Я очистил gvResult перед применением к нему пользовательских изменений, иначе алгоритм сортировки не меняется на то, что установил пользователь.

gvResult.DataSource = new DataTable();
gvResult.DataSource = dataTable_With_New_Set_And_Sort_of_Columns;

В этом заключается еще одна проблема! Он также удаляет сводку счетчика строк вместе с другими настройками макета gvResult. Я провел поиск на форуме по инфраструктуре и нашел следующий код; однако первая проблема все еще существует. Сортировка столбцов не меняется.

BindingSource bs = new BindingSource();
bs.DataSource = typeof(DataTable);
bs.DataSource = dataTable_With_New_Set_And_Sort_of_Columns;
gvResult.DataSource = bs;

У Вас есть какие-то предложения?

Извините меня за мой плохой английский язык.

Редактировать: я попробовал что-то вроде ниже, но это снова не сработало:

DataTable dtTest = new DataTable();
dtTest.Rows.Clear();
dtTest = Method_That_Returns_DataTable_With_New_Set_And_Sort_of_Columns();
gvResult.DataSource = dtTest.Copy();

person M_Mogharrabi    schedule 30.01.2013    source источник
comment
пробовали bs.Clear()?   -  person spajce    schedule 30.01.2013
comment
Привет, spajce, да, я пробовал это, но я получил сообщение об ошибке «Невозможно очистить этот список».   -  person M_Mogharrabi    schedule 02.02.2013
comment
попробуйте очистить DataTablegvResult.Clear();   -  person spajce    schedule 02.02.2013
comment
Вы имели в виду мой ultragrid? Потому что gvResult — это ultragrid. Но у ultragrid нет никакого метода Clear().   -  person M_Mogharrabi    schedule 02.02.2013
comment
что это dataTable_With_New_Set_And_Sort_of_Columns? нет типа dataTable_With_New_Set_And_Sort_of_Columns.Rows.Clear() или dataTable_With_New_Set_And_Sort_of_Columns.Clear()?   -  person spajce    schedule 02.02.2013
comment
DataTable_With_New_Set_And_Sort_of_Columns создается и возвращается методом, поэтому у меня нет экземпляра datatable для его очистки.   -  person M_Mogharrabi    schedule 02.02.2013
comment
так каков ожидаемый возвращаемый метод этого dataTable_With_New_Set_And_Sort_of_Columns?   -  person spajce    schedule 02.02.2013
comment
Я отредактировал свой вопрос.   -  person M_Mogharrabi    schedule 03.02.2013
comment
на самом деле вам не нужно использовать .Copy(), можете проверить это? devcenter.infragistics.com/Support/   -  person spajce    schedule 03.02.2013
comment
У меня уже был тест таким образом, но у меня есть вторая проблема.   -  person M_Mogharrabi    schedule 03.02.2013
comment
я думаю, вы должны попытаться проконсультироваться с их разработчиком :)   -  person spajce    schedule 03.02.2013
comment
Хорошо, спасибо за ваши ответы.   -  person M_Mogharrabi    schedule 03.02.2013


Ответы (1)


М_Могарраби,

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

Всякий раз, когда вы привязываете данные к UltraGrid, каждый раз срабатывает событие IntializeLayout, поэтому вы должны убедиться, что вы установили сводную строку так, чтобы она отображалась в функции InitializeLayout.

Вот так:

    private void yourUltraGrid_InitializeLayout(object sender, InitializeLayoutEventArgs e)
    {
        // Define Global settings like you usually do
        // ....

        // Configure your UltraGrid columns.
        //// ID
        //// Caption: "ID"
        e.Layout.Bands[0].Columns[ColumnKeyA].Header.Caption = "ID";
        e.Layout.Bands[0].Columns[ColumnKeyA].Header.VisiblePosition = 0;
        e.Layout.Bands[0].Columns[ColumnKeyA].Width = 50;
        // Any additional settings you may want for this column.
        // Repeat for each column...


        // Then add this block under each column you want to add Summary value to.

        // This if function is critical to avoid summary rows from duplicating itself.
        // Check to see if the Summary does not exist.
        if (!e.Layout.Bands[0].Summaries.Exists("yourSummaryKey"))
        {
            // If it doesn't exist, create the summary.
            SummarySettings summary;
            summary = e.Layout.Bands[0].Summaries.Add("yourSummaryKey", SummaryType.Sum,
                e.Layout.Bands[0].Columns[ColumnKeyA]);

            // Change the Display Formatting if you desire.
            // This display format will change it to just numbers
            // instead of "Sum = 1234"
            summary.DisplayFormat = "{0}";

            // Change the horizontal alignment for the cell text.
            summary.Appearance.TextHAlign = Infragistics.Win.HAlign.Left;

            // Apply any other settings to this summary column
            // if needed.
            // ...
        }
    }

Примечание. Строка "Сводка" работает только для родительского диапазона. Невозможно установить итоговую строку для дочерних бэндов.

Если вы хотите сбросить сетку данных, добавьте следующее в свой код (но не в функцию InitializeLayout):

    private void btnReset_Click(object sender, EventArgs e)
    {
        yourUltraGrid.DeleteSelectedRows();

        // This will trigger the yourUltraGrid_InitializeLayout event
        // and will ensure the column settings are defined.
        yourUltraGrid.DataSource = Prototype.ugGetResourcePlanning();
    }

Это сохранит любые изменения, внесенные в алгоритм сортировки. Итак, в этом примере: если пользователь внес какие-либо изменения в UltraGrid и вместе с этим изменил алгоритм сортировки. Нажатие на кнопку «Сброс» вернет только данные, но не алгоритм сортировки.

Надеюсь это поможет.

person Sometowngeek    schedule 23.06.2016