#c# #listbox #subsonic2.2 #calculated-field
#c# #listbox #subsonic2.2 #вычисляемое поле
Вопрос:
Я использую SubSonic 2.2 для моего DAL и расширил один из моих классов вычисляемым свойством, которое возвращает строку, содержащую другое свойство с отступом, основанным на уровне контура, на котором встречается элемент. Код для свойства приведен ниже. Проблема в том, что когда я пытаюсь использовать это свойство в качестве DisplayMember для элемента управления ListBox в форме (причина, по которой я написал это в первую очередь), это не сработает. ListBox возвращается к отображению свойства ID, которое задано как ValueMember. Чтобы проверить, работает ли свойство, я перебрал коллекцию объектов, которыми я заполнял ListBox, и, используя MessageBox.Show(obj.property), подтвердил, что он действительно возвращает значение, которое я ищу. Я что-то упускаю или это должно сработать? кстати — Может быть лучший способ сделать отступ, но это не то, что мне нужно в данный момент, спасибо!
Следующий код:
общедоступная категория частичного класса InteriorsCategory: ActiveRecord, IActiveRecord { список открытых строк отображается { получить { возвращаемое значение строки = "";
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();
}
Ответ №1:
Если вы можете видеть свои данные в коллекции, то, похоже, возникла проблема с привязкой вашего ListBox. Вот пример того, как я привязываю ListBox, используя дозвуковую коллекцию значений.
ISOCountryCodeCollection countrys =
new ISOCountryCodeCollection().OrderByAsc(ISOCountryCode.Columns.Country).Load();
Country.DataSource = countrys;
Country.DataValueField = "ThreeChar";
Country.DataTextField = "Country";
Country.DataBind();
В приведенном выше примере я привязываю 3-символьный код страны к "DataValueField", а полное название страны - к "DataTextField".