Listbox.DisplayMember не будет отображать значение из вычисляемого свойства

Я использую SubSonic 2.2 для своего DAL и расширил один из своих классов вычисляемым свойством, которое возвращает строку, содержащую другое свойство с отступом, основанным на уровне контура, на котором встречается элемент. Код свойства приведен ниже. Проблема в том, что когда я пытаюсь использовать это свойство как DisplayMember для элемента управления ListBox в форме (причина, по которой я написал его в первую очередь), оно не будет работать. ListBox возвращается к отображению свойства ID, которое установлено как ValueMember. Чтобы проверить, работает ли это свойство, я перебрал коллекцию объектов, которыми заполнял ListBox, и, используя MessageBox.Show(obj.property), подтвердил, что оно действительно возвращает искомое значение. Я что-то упустил или это должно работать? кстати - может быть лучший способ сделать отступы, но это не то, что мне нужно в данный момент, спасибо!

Код следует:

открытый частичный класс InteriorsCategory: ActiveRecord, IActiveRecord { public string ListDisplay { get { string returnValue = "";

            for (int i = 1; i < this.SpecLevel; i++)
            {
                returnValue += "    ";
            }
            returnValue += this.CategoryName;
            return returnValue;
        }
    }
}

<>

I definitely get data in my collection and the binding I'm doing is exactly the same as yours (binding code posted below). The return value of the ListDisplay property that I'm using is a string concatenation of two values in the object. Think of it as a "full name" property that concatenates the FirstName a space and the LastName properties into a single string which it returns. I am trying to bind the ListDisplay property to the DisplayMember property of the listbox, but all that shows in the listbox is the Id field which I am binding to the ValueMember.

private void FillCategories() { lstPackageCategories.DataSource = new InteriorsCategoryCollection().Load(); lstPackageCategories.DisplayMember = "CategoryName"; lstPackageCategories.ValueMember = "Id";
((InteriorsCategoryCollection)(lstPackageCategories.DataSource)).Sort("SpecSection", true);
lstPackageCategories.SelectedItem = lstPackageCategories.Items[0];

currentCategory = (InteriorsCategory)lstPackageCategories.SelectedItem; RefreshAvailableItems(); }


person Mike Devenney    schedule 21.04.2011    source источник


Ответы (1)


Если вы можете видеть свои данные в коллекции, то похоже, что есть проблема с привязкой вашего ListBox. Вот пример того, как я привязываю ListBox, используя коллекцию значений SubSonic.

    ISOCountryCodeCollection countrys =
        new ISOCountryCodeCollection().OrderByAsc(ISOCountryCode.Columns.Country).Load();

    Country.DataSource = countrys;
    Country.DataValueField = "ThreeChar";
    Country.DataTextField = "Country";
    Country.DataBind();

В приведенном выше примере я привязываю трехсимвольный код страны к «DataValueField», а полное название страны — к «DataTextField».

person Zachary    schedule 27.04.2011