Невозможно привязать имя свойства или столбца в источнике данных. Имя параметра: dataMember - PullRequest
8 голосов
/ 21 октября 2008

Это исключение, которое я получаю, когда пытаюсь привязаться к System.Type.Name.

Вот что я делаю:

this.propertyTypeBindingSource.DataSource = typeof(System.Type);

/* snip */

this.nameTextBox1.DataBindings.Add(
    new System.Windows.Forms.Binding(
        "Text", 
        this.propertyTypeBindingSource, 
        "Name", true));

Есть ли какой-нибудь трюк с привязкой к System.Type, он не разрешен или есть обходной путь? Нет проблем с привязкой к другим типам.

Ответы [ 3 ]

12 голосов
/ 21 октября 2008

Действительно, существует особый подход к типу ... этот подход используется в IDE и т. Д. Для предварительной настройки метаданных. Если вы посмотрите на сгенерированные IDE привязки, они делают что-то вроде:

bindingSource1.DataSource = typeof(MyObject);

говоря "когда мы получаем реальные данные, мы ожидаем, что MyObject isntance (s)"; то есть, когда вы запрашиваете «Имя», оно ищет свойство name в MyObject , а не имя экземпляра Type. Это позволяет сеткам и т. Д. Получать свои метаданные, не дожидаясь реальных данных; но, как следствие, вы не можете связываться с Типом «по-настоящему».

Код System.ComponentModel идентичен между простыми привязками и привязками списков (менеджер валют или обмен), поэтому простые привязки также наследуют это поведение. Точно так же вы не можете связать со свойствами класса, который реализует IList / IListSource, так как это интерпретируется особым образом.

Ваш дополнительный класс кажется разумным.

3 голосов
/ 21 октября 2008

Найден обходной путь. Сделал класс

public class StubPropertyType
{
    public StubPropertyType(Type type)
    {
        this.StubPropertyTypeName = type.Name;
    }

    public string StubPropertyTypeName = string.Empty;
}

создал источник привязки

this.propertyStubBindingSource.DataSource = typeof(StubPropertyType);

создал экземпляр класса и привязал к нему текстовое поле.

this.nameTextBox.DataBindings.Add(
    new System.Windows.Forms.Binding(
        "Text", 
        this.propertyStubBindingSource, 
        "StubPropertyTypeName", 
        true));

работает точно так, как требуется.

0 голосов
/ 12 января 2011

Одна из возможных причин этой ошибки - таблица / набор данных не имеют указанного столбца. В частности, в случае Typed DataSet убедитесь, что у вас есть правильные имена в XSD, совпадающие с именами столбцов из таблицы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...