Выбрать несколько полей в combocheckbox

324
04 мая 2017, 11:32

Здравствуйте. Очень нужна ваша помощь. Есть приложение на winform, связанное с базой данных. С помощью Entity Framework выводится таблица (на datagridwiew), есть combocheckbox, в котором можно выбрать поля. Пользователь выбирает поле и по этому полю выводится общее количество, общая сумма и само выбранное поле. Привожу скрин,чтоб было понятнее, как все работает. Выборка осуществляется с помощью linq, например:

if (checkedListBox1.SelectedItem == "date")
            {
                var query = from order in ct.Registration.ToList()
                group order by order.date into g
                select new
                {
                    Date = g.Key,
                    Quantity = g.Sum(order => order.quantity),
                    Amount= g.Sum(order => order.amount)
                };
                dataGridView1.DataSource = query.ToList();
            }

Задача стоит вот в чем: нужно реализовать возможность выбрать несколько полей. На втором скрине показано, что выбрано поле date. А нужно, чтобы можно было выбрать, например date и company. Как это можно сделать? Возможно ли это реализовать, если используется Entity Framework? Так же желательно не использовать combocheckbox, а просто поставить чекбоксы на каждой колонке(чтобы не привязывать колонку к ее названию)

Answer 1

Вы пишите:

var query = from order in ct.Registration.ToList()...

Это читается как "вытяни все данные из таблицы Registration...". Вы приводите IQueryable к IEnumerable. Это не нужно (зачем?). Это нужно будет после построения выборки.

Итого получаем:

var registrations = ct.Registration.OrderBy(r => r.date).ToList()

Далее.

Не уверен, что вам надо при каждом показе/скрытии колонки ползти в базу. Достаточно будет просто при инициализации загрузить данные и после изменять видимость колонок у DataGridView контрола.

Вы можете использовать CheckedListBox.CheckedItems. Но к данной задаче это не совсем подходит, ибо мы можем скрыть колонки, не включенные в этот CheckedListBox (quantity, например). Поэтому можно поступить так:

foreach (var column in dataGridView1.Columns)
{
    var item = checkedListBox1.Items.FirstOrDefault(i => i.Text == colunm.Name);
    if (item != null)
    {
        column.Visible = item.Selected;
    }
}
READ ALSO
Как узнать, какой return сработал в unit test

Как узнать, какой return сработал в unit test

Есть метод, который добавляет нового пользователяЕсли пользователь добавлен - перенаправляет на index, иначе возвращает вьюшку с моделью

285
Unity - как написать “после того как анимация закончится”?

Unity - как написать “после того как анимация закончится”?

Unity, C#Есть молдель с animator, в котором уже настроены стейты-анимации и параметры для переходов между ними

595
Символ в название переменной

Символ в название переменной

Хочу прочитать JSON файл с использованием View модели (класса с названием всех переменных), но возникла загвоздкаНекоторые имена в файле имеют...

229