#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"