powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работа в одной форме с DevGrid и разными источниками List<T>
8 сообщений из 8, страница 1 из 1
Работа в одной форме с DevGrid и разными источниками List<T>
    #39454662
Crazy_Wolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый! Есть форма с расположены на ней Gridом. Как правильнее организовать работу с одной формой и несколькими источниками List. Например, пользователь может работать со справочником продукции List или контрагентами List. Соответственно при добавлении нового продукта открывается форма нового продукта. Пока организовал банально в виде
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
if (_currListMode == ListMode.Production)  // ListMode - enum с возможными режимами редактирования
            {
                AddProduction();
            }
            else
            {
                 AddKontragent();
            }



ListMode - обычный enum ListMode {Production, Kontragent}
private ListMode _currListMode;
инициализируется как ListMode.Production при создании формы, переключается
Код: c#
1.
2.
3.
4.
5.
6.
private void toolStripDropDownButtonMode_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
    {
        _currListMode = e.ClickedItem == productionToolStripMenuItem ? ListMode.Production : ListMode.Kontragent;
        toolStripDropDownButtonMode.Text = e.ClickedItem.Text;
        RefreshData(false);   // обновляем грид
    }


а метод соответственно вызывает создание нового элемента продукции и показ формы продукции, с прибинденными полями класса
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
private void AddProduction()
    {
        var pac = new Production(......);

        using (var frm = new FrmProductionEdit(pac.Clone()))
        {
            if (frm.ShowDialog(this) != DialogResult.OK) return;
            pac.CopyFrom(frm.Pac);
        }

        pac.Save();

        gridViewProduction.DataController.BeginUpdate();
        _bs.Add(pac);
        gridViewProduction.DataController.EndUpdate();
        var rh = gridViewProduction.LocateByValue("Id", pac.Id);
        if (rh != GridControl.InvalidRowHandle)
            gridViewProduction.FocusedRowHandle = rh;
    }


Вопрос в том можно ли как нить избежать дублирование обработчиков (новый элемент, редактирование и т.д.)
...
Рейтинг: 0 / 0
Работа в одной форме с DevGrid и разными источниками List<T>
    #39454840
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор представте себя на нашем месте и прочитайте сообщения, лично я не понял сути проблемы, от куда код из 1 отрывка?
из события ButtonClick ?
...
Рейтинг: 0 / 0
Работа в одной форме с DevGrid и разными источниками List<T>
    #39455075
Crazy_Wolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В данном случае да. Т.е пользователь щелкнул по кнопке Add в режиме ListMode.Production - открылась форма продукции, иначе - контрагентов.
...
Рейтинг: 0 / 0
Работа в одной форме с DevGrid и разными источниками List<T>
    #39455088
Crazy_Wolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В случае с формой- понятно
Код: c#
1.
2.
3.
4.
5.
6.
private void ShowForm<T>() where T : Form, new()
        {
            var form = new T();
.............................

        }


а вот как правильно в форму передавать еще произвольный класс? Т.е. для формы контрагентов передать класс Kontragent? без кучи свитчей и ифов.
...
Рейтинг: 0 / 0
Работа в одной форме с DevGrid и разными источниками List<T>
    #39455136
Barkan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crazy_Wolf,

Сделать "родительский" класс, от которого отнаследовать и продукцию, и контрагентов, и прочих.
Не кошерно?
...
Рейтинг: 0 / 0
Работа в одной форме с DevGrid и разными источниками List<T>
    #39455145
Crazy_Wolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну в принципе можно, как раз сейчас этот вариант пробую. Только там из общий полей только ИД и наименование :)
...
Рейтинг: 0 / 0
Работа в одной форме с DevGrid и разными источниками List<T>
    #39455159
Barkan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crazy_Wolf,

Я так понял, что речь идёт о "справочниках".
Значит как минимум у них должны быть методы "Добавить", "Изменить", "Удалить".
Объявить их в классе "родителя" как переопределяемые методы.
...
Рейтинг: 0 / 0
Работа в одной форме с DevGrid и разными источниками List<T>
    #39455234
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Форма вообще ничего не должна знать о специфической логике данных, с которыми работает. Как выше сказали, об этом должен знать словарь. Вынести его контракт в общий интерфейс/базовый класс, параметризовать форму интерфейсом, у интерфейса дергать нужные методы. Реализация интерфейса внутри будет делать то, что нужно.
P.S. WPF на эту тему хорошо мозги вправляет.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Работа в одной форме с DevGrid и разными источниками List<T>
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]