Работа в одной форме с Grid и разными источниками List<T>

219
13 мая 2017, 17:42

День добрый! Есть форма с расположены на ней Gridом. Как правильнее организовать работу с одной формой и несколькими источниками List. Например, пользователь может работать со справочником продукции List или контрагентами List. Соответвенно при добавлении нового продукта открывается форма нового продукта. Пока организовал банально в виде

if (_currListMode == ListMode.Production)  // ListMode - enum с возможными режимами редактирования
            {
                EditProduction();
            }
            else
            {
                 EditKontragent();
            }

Вопрос в том как это сделать правильнее.

ListMode - обычный enum ListMode {Production, Kontragent}

private ListMode _currListMode;

инициализируется как ListMode.Production при создании формы, переключается

 private void toolStripDropDownButtonMode_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
    {
        _currListMode = e.ClickedItem == productionToolStripMenuItem ? ListMode.Production : ListMode.Kontragent;
        toolStripDropDownButtonMode.Text = e.ClickedItem.Text;
        RefreshData(false);   // обновляем грид
    }
Answer 1

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

 private void toolStripButtonAdd_Click(object sender, EventArgs e)
    {
            if (_currListMode == ListMode.Production)
            {
                AddProduction();
            }
            else
            {
                AddKontragent);
            }
   }

а метод соответственно вызывает создание нового элемента продукции и показ формы продукции, с прибинденными полями класса

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;
    }
Answer 2

Насколько я понял ваши функции EditProduction(),EditKontragent() возврашают лист,если так можете переписать код вот так что бы использовать возврашаемое значение

    public static List<string> EditProduction()
    {
        yield return "Run TestFunc";
    }
    public static List<string> EditKontragent()
    {
        yield return "Run Test";
    }
    var result = _currListMode== ListMode.Production ? EditProduction() : EditKontragent();
    var list = new BindingList<string>(result);
    myGrid.DataSource = list;
READ ALSO
Обновление данных в БД Mysql WPF

Обновление данных в БД Mysql WPF

Доброго времени сутокНеобходимо обновить Таблицу в Mysql, а вернее заменить одно значение в одной строке

222
Передача кода для размещения на сайте

Передача кода для размещения на сайте

Я создала проект C# aspnet web forms

260
System.TypeInitializationException в конструкторе SqlDataAdapter

System.TypeInitializationException в конструкторе SqlDataAdapter

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

262
Изменить свойство объекта в коллекции TabPage

Изменить свойство объекта в коллекции TabPage

Необходимо было сделать список изображений, чтобы они переключались через TabPagesВ каждом TabPage добавляю объект PictureBox

224