Загрузка DataGridView из LINQ - PullRequest
0 голосов
/ 01 мая 2020

У меня есть форма с DataGridViews, в которой DataSource установлен на DataContext моей базы данных, чтобы автоматически извлекать информацию и разрешать ее редактирование. Но мне нужен цвет для отображения цвета из идентификатора цвета, который соответствует цвету в таблице цветов, и я не знаю, как этого добиться, также позволяя ему автоматически редактировать и обновлять записи.

private dbCounterTopsDataContext dbContext = new dbCounterTopsDataContext();

private void FrmCurrentInventory_Load(object sender, EventArgs e)
{
    dataGridColors.DataSource = dbContext.Colors;
    dataGridBarTops.DataSource = dbContext.BarTops;
    dataGridKitchenTops.DataSource = dbContext.Kitchens;
    dataGridVanityTops.DataSource = dbContext.Vanities;
}

Я также пробовал это, и оно работало с отображением, но я больше не мог обновляться напрямую из сетки данных

private void FrmCurrentInventory_Load(object sender, EventArgs e)
{
    dataGridColors.DataSource = dbContext.Colors.Select(o => new { ColorId = o.ColorID, Color = o.Color1 });
    dataGridBarTops.DataSource = dbContext.BarTops.Select(o => new { Color = o.Color.Color1, Length = o.Length, Width = o.Width });
    dataGridKitchenTops.DataSource = dbContext.Kitchens.Select(o => new { Color = o.Color.Color1, Length = o.Length }).ToList();
    dataGridVanityTops.DataSource = dbContext.Vanities;
}

1 Ответ

1 голос
/ 01 мая 2020

Несколько хороших советов в комментариях от SSS, возможно, самый простой способ добиться этого - использовать AutogenerateColumns для генерации большей части материала, а затем добавить несколько столбцов со списком для ваших цветов. Вероятно, это будет go что-то вроде этого:

dataGridColors.DataSource = 

dataGridBarTops.DataSource = dbContext.BarTops;
dataGridBarTops.AutogenerateColumns = false;
var c = new DataGridViewComboBoxColumn();
c.HeaderText = "Color";
c.DisplayMember = "Color1"; //name of property that says Blue in color entity
c.ValueMember = "ColorID"; //name of property that says 5 in color/entity
c.DataPropertyName = "BarTopColorId"; //name of property that says 5 in BARTOPS table/entity
c.DataSource = dbContext.Colors; //personally I would use a bindingSource here
dataGridBarTops.Columns.Add(cb);

Я оставлю удаление текста в поле Цвет столбца в качестве упражнения для вас - может быть, сначала оставьте его, чтобы увидеть, как работает комбо

Просмотр таблицы цветов предназначен для редактирования фактических определений цветов и т. Д. c. Поле со списком в верхней части бара предназначено для выбора другого цвета для одной верхней панели. Если вы отредактируете таблицу цветов, она изменит то, что находится в списке комбо. Если вы выберете новое комбо-значение, оно изменит идентификатор цвета баропта (независимо от того, как называется это свойство)

Будьте осторожны, чтобы не отредактировать идентификаторы в цветах, которые используются в барах - не удаляйте цветовой идентификатор 5 из таблицы цветов, пока есть еще баропт, который его использует


Я оставил там комментарий о bindingsources. Я никогда не связывал DGV прямо со списком сущностей LINQ, и, вероятно, я бы этого не сделал (отчасти потому, что он загружает всю таблицу, которая может быть огромной, а отчасти потому, что моя привязка данных winforms почти исключительно связана со строго типизированными наборами данных), но вы найдете это для работать (и, возможно, вам нужна вся таблица, без фильтрации). Если, однако, вы начинаете видеть странные эффекты, такие как выбор разных строк в представлении данных Цвета, приводит к изменению значения всех полей со списком, связывайте их через источник привязки, чтобы у них было что-то, что специально отслеживает «текущий элемент» для комбинации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...