ahmed_sa Ответов: 1

Коллекция элементов не может быть изменена при установке свойства datasource ошибка


У меня есть два окна формы

ошибка показывает, когда мне нужно передать данные из windows form2 в текстовое поле

для окна формы form1 поле со списком

Первая форма windows

нашел combobox внутри windows form1 и показываю данные в нем в событии загрузки формы

public DataTable ShowExceltwoLanguage()
{

            OleDbConnection con = new OleDbConnection(connection);


            con.Open();
            string str = "select MemberID,MemberNameAR + ' - ' + MemberNameEN as MemberName from [MemberAR$]";
            OleDbCommand com = new OleDbCommand();
            com = new OleDbCommand(str, con);
            OleDbDataAdapter oledbda = new OleDbDataAdapter();
            oledbda = new OleDbDataAdapter(com);
            DataSet ds = new DataSet();
            ds = new DataSet();
            oledbda.Fill(ds, "[MemberAR$]");
            con.Close();
            DataTable dt = new DataTable();
            dt = ds.Tables["[MemberAR$]"];
            return dt;


}


в случае загрузки windows form1 я пишу следующее

QrClasses qrc = new QrClasses();
  DataTable dt = qrc.ShowExceltwoLanguage();
  comboBox4.DataSource = dt;
  comboBox4.DisplayMember = "MemberName";
  comboBox4.ValueMember = "MemberID";


Вторую форму

вот ошибка

Коллекция элементов не может быть изменена, если свойство DataSource установлено show

в событие click кнопки button1 на форме Form2

if (!string.IsNullOrWhiteSpace(textBox1.Text))
                {

                       
                        var cb = ((Form1)Owner).comboBox4;
                        var index = cb.FindString(textBox1.Text);
                        if (index == -1)
                        {
                            cb.Items.Add(textBox1.Text);// in this line Additional information: Items collection cannot be modified when the DataSource property is set.
                            index = cb.FindString(textBox1.Text);
                            if (index > -1)
                            {
                                cb.SelectedIndex = index;
                                Close();
                            }
                        }
                        else
                        {

                            cb.SelectedIndex = index;
                        }
                    }

так вот как это решить, если это возможно ?

Что я уже пробовал:

Items collection cannot be modified when the DataSource property is set Error

[no name]

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

ahmed_sa

Я получаю ошибку при попытке коллекции элементов не может быть изменен когда свойство datasource установлено ошибка если это возможно может ли кто нибудь помочь мне

ZurdoDev

Да, ошибка объясняет, что происходит. Элемент управления привязан к источнику данных, и вы пытаетесь изменить элементы непосредственно. Он говорит вам, что вы не можете этого сделать.

[no name]

"может ли кто-нибудь мне помочь", судя по всему, не судя по всем принятым ответам, которые вы имеете в своих "вопросах"...
Так в чем же здесь проблема? Вы не понимаете сообщение об ошибке? Это совершенно ясно. Как человек, который утверждает, что он из США, у вас не должно быть никаких проблем с доступом к google и выяснением того, что означает сообщение об ошибке. У вас есть combobox, где задано свойство datasource, и вы пытаетесь изменить коллекцию. Либо отмените установку источника данных перед изменением коллекции, либо измените коллекцию перед установкой источника данных. Точно так же, как говорится в сообщении об ошибке

Karthik_Mahalingam

вы зацикливаете коллекцию ?

1 Ответов

Рейтинг:
0

OriginalGriff

Как уже было сказано, проблема заключается именно в том, что говорится в сообщении об ошибке:

Items collection cannot be modified when the DataSource property is set

Ваш ComboBox привязан к базе данных - он привязан к коллекции объектов, из которых он получает свои значения. Когда вы пытаетесь добавить элемент в элемент управления, вы пытаетесь дать ему два разных источника данных - исходную коллекцию и новый набор элементов - и он просто не хочет обрабатывать это так же, как вы не хотите обрабатывать все ваши файлы, находящиеся на компьютерах в разных зданиях без подключения к сети!

Вместо того чтобы добавлять элементы в ComboBox, добавьте их в базовую коллекцию, из которой вы сказали ей получить значения: источник данных.