Привязка сетки данных comboboxcolumn WPF

#c# #wpf #vb.net #datagrid #combobox

#c# #wpf #vb.net #сетка данных #combobox

Вопрос:

У меня проблема, когда я пытаюсь привязать свой столбец combobox.

У меня есть 2 таблицы набора данных, и я хочу, чтобы в поле со списком отображались значения 1 таблицы набора данных, но выбранный индекс будет взят из другого набора данных.

Пример :

1.Набор данных материалов с идентификатором col и идентификатором UnitID col, которые представляют единицу измерения, для которой вычисляется вес материала.

2.Набор данных единиц измерения с идентификатором col и именем

В сетке данных будут отображаться сведения о наборе данных материала (идентификатор в виде столбца текстового поля и UnitID в виде столбца комбинированного поля)

Я хочу, чтобы в моей таблице со списком данных отображались имена всех элементов в опции combobox, и выбранный элемент будет тем, у которого индекс равен идентификатору единицы материала.

Мне удалось отобразить имена всех моих модулей в качестве параметров combobox с :

 cmb.ItemsSource = DS.Units.ToList

cmb.DisplayMemberPath = "EnglishName"
  

Но не удалось указать SelectedValuePath и SelectedValueBinding правильным образом.

Комментарии:

1. Можете ли вы показать свой код и место, где находится ошибка. Это будет легче понять

2. Все еще не очень понятно. Как я знаю, в combobox вы можете показывать по 1 элементу за раз. Для этого вы можете использовать SelectedValue или SelectedIndex.

3. Привет и добро пожаловать в Stack Overflow. Пожалуйста, отредактируйте свой код, чтобы показать ваши структуры данных и ваши попытки на данный момент. Также четко укажите, какие результаты и ошибки вы получили.

4. Всем привет, я попытаюсь сделать то, что мне посоветовали, с объединением 2 наборов данных в один. Саша, это не обычный ComboBox, это элемент comboboxcolumn, и у него нет (насколько я знаю) свойства SelectedIndex.

Ответ №1:

Один источник данных может использоваться для нескольких полей со списком, однако два источника данных не могут привязываться к одному элементу управления. Вместо этого мы можем использовать LINQ для объединения этих источников данных и назначения результирующего источника данных в поле со списком.

 DataTable material= ds.Tables["Material"];
DataTable units= ds.Tables["Units"];

var query =
    from m in material.AsEnumerable()
    join u in units.AsEnumerable()
    on m.Field<int>("Column1") equals
        u.Field<int>("Column1")
select new
    {
        Text =
            u.Field<string>("EnglishName"),
        Value =
            m.Field<int>("MaterialID")
    };

cmb.ItemsSource = query.ToList();

cmb.DisplayMemberPath = "Text";
cmb.SelectedValuePath = "Value"