Nano Hash - криптовалюты, майнинг, программирование

Привязка данных к программно созданному DataTable

Предположим, у меня есть такая таблица данных:

        DataTable dt = new DataTable("Woot");

        dt.Columns.AddRange(new DataColumn[]{
            new DataColumn("ID",typeof(System.Guid)),
            new DataColumn("Name",typeof(String))
            });

Когда я пытаюсь привязать к нему элемент управления:

        this.txtName.DataBindings.Add("Text", _dtRow, "Name");

Я получаю это исключение:

Не удается выполнить привязку к свойству или имени столбца в источнике данных. Имя параметра: dataMember

Любая идея, почему это работает с таблицей данных, созданной dataAdapter, но не с программно созданной?

08.01.2009

Ответы:


1

ОК, повозившись с вашим кодом какое-то время, я продолжал ставиться в тупик. Тогда я, наконец, понял проблему. Я предполагаю, что _dtRow — это DataRow. Вам нужно сослаться на фактическую таблицу данных (dt).

this.textBox1.DataBindings.Add("Text", dt, "Name");

РЕДАКТИРОВАТЬ: Увидев ваш комментарий к сообщению Игоря. Если вы привязываетесь к dt, скажем, например, если у вас есть datagridview, привязанный к этому DataTable, каждый раз, когда вы выбираете другую строку, текстовое поле будет меняться.

Вот код, который работает для меня:

            DataTable dt = new DataTable("Woot");

            dt.Columns.AddRange(new DataColumn[]{
            new DataColumn("ID",typeof(System.Guid)),
            new DataColumn("Name",typeof(String))
            });


            dt.Rows.Add(Guid.NewGuid(), "John");
            dt.Rows.Add(Guid.NewGuid(), "Jack");

            this.dataGridView1.DataSource = dt;

            this.textBox1.DataBindings.Add("Text", dt, "Name");

Измените строки в DGV, и вы увидите текстовое поле с измененным текстом.

ЕЩЕ РАЗ EIDT Хорошо, пора взломать его. Вот как я заставил это работать:

this.textBox1.DataBindings.Add("Text",_dtRow.ItemArray[1], ""); 

Я использовал индекс 1, но вы можете использовать любой индекс, который вам нужен в массиве.

08.01.2009
  • Привязка к таблице предотвращает изменение текстовых полей. Я только что попробовал. 08.01.2009
  • Я тоже только что попробовал. У меня есть код, который вы опубликовали, но у меня также есть DataTable, привязанный к DataGridView. Каждый раз, когда я меняю строки в DataGridView, текст в текстовом поле меняется. 08.01.2009
  • Проблема в том, что фактический DataTable абстрагируется в форме, в то время как он находится в пользовательском элементе управления без видимости для DT, поэтому просто свойство CurrentRow. (Не вините меня, я не разрабатывал это приложение). CurrentRow.Table привязывается, но не обновляется. 08.01.2009

  • 2

    разве вы не должны ссылаться на dt вместо _dtRow?

    Например:

    this.txtName.DataBindings.Add("Text", dt, "Name");
    

    РЕДАКТИРОВАТЬ:

    Этот код работал для меня:

       DataTable dt = new DataTable("Woot");
    
        dt.Columns.AddRange(new DataColumn[]{
            new DataColumn("ID",typeof(System.Guid)),
            new DataColumn("Name",typeof(String))
        });
    
        DataRow r = dt.NewRow();
        r["ID"] = new Guid();
        r["Name"] = "AAA";
        dt.Rows.Add(r);
    
        r = dt.NewRow();
        r["ID"] = new Guid();
        r["Name"] = "BBB";
        dt.Rows.Add(r);
    
        dataGridView1.DataSource = dt;
    
        this.txtName.DataBindings.Add("Text", r.Table , "Name");
    
    08.01.2009
  • Нет, я привязываюсь к отдельной строке, выбранной в сетке данных, а не ко всей таблице. 08.01.2009
  • Почему бы вместо этого не привязываться к datatable? Таким образом, если вы выберете другую строку в таблице, свойство текста изменится соответствующим образом. Я думаю, что это вся цель привязки данных... 08.01.2009
  • Возвращаясь к вашему исходному вопросу, я предполагаю, что причина возникновения исключения заключается в том, что DataTable реализует интерфейс IListSource (который возвращает список), а DataRow - нет. 08.01.2009
  • Новые материалы

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

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..