Привязка объекта данных (или списка) к двум полям со списком

#c# #generics #c#-4.0 #datatable

#c# #общие положения #c #-4.0 #объект данных

Вопрос:

У меня есть DataTable (или общий список), который я хочу привязать к 2 ComboBox . Если я привяжу ее при ComboBox изменении одного, другое ComboBox тоже изменится на первое ComboBox значение.

Как я могу их разделить?

Я создал еще одно, DataTable и назначил ему main DataTable , но проблема все еще остается.

Ответ №1:

Поскольку вы ссылаетесь на один и тот же объект в обоих полях со списком, при изменении одного из них изменяется и другой

 DataTable dt;
combobox1.DataSource=dt;
DataTable dt2;
dt2 =  dt.Copy();
combobox2.DataSource=dt2;
  

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

1. Clone () просто копирует структуру datatble

2. Однако вам следует учитывать, что копирование исходной таблицы данных будет иметь последствия: если вы обновите первую таблицу данных (например, добавите или удалите элемент), вторая обновляться не будет. Но используете ли вы ASP.NET веб-формы?

Ответ №2:

Похоже, вы привязали свойства SelectedItem ваших двух списков со списком к одному и тому же свойству. Если вы хотите выбрать разные элементы в соответствии с вашими полями со списком, вам следует использовать разные свойства:

 <ComboBox ItemSource="{Binding List}" SeletectedItem="{Binding SelectedItem1, Mode=TwoWay}"/>
<ComboBox ItemSource="{Binding List}" SeletectedItem="{Binding SelectedItem2, Mode=TwoWay}"/>
  

Ответ №3:

Проблема в том, что простое создание новой переменной DataTable (или списка) и присвоение ей существующего списка не создает новую. Это просто создает другую ссылку, которая указывает на ту же самую. Итак, у вас нет двух одинаковых объектов, у вас есть один объект, к которому вы можете получить доступ двумя разными способами. Это небольшая трудность, которая часто сбивает людей с толку. 🙂

Метод Clone (), о котором упоминал NDC, является одним из ответов. Для списков вы также можете использовать toArray (), чтобы создать массив и связать его (поскольку у массива не будет таких же проблем).

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

1. Clone () просто копирует структуру datatble