#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