Я использую SubSonic 2.2 для своего DAL и расширил один из моих классов вычисляемым свойством, которое возвращает строку, содержащую другое свойство с отступом, основываясь на уровне контура, на котором встречается элемент. Код для собственности ниже. Проблема в том, что когда я пытаюсь использовать это свойство в качестве DisplayMember для элемента управления ListBox на форме (причина, по которой я написал его в первую очередь), оно не будет работать. ListBox возвращается к отображению свойства ID, которое установлено как ValueMember. Чтобы проверить, что свойство работает, я просмотрел коллекцию объектов, которыми я заполнил ListBox, и с помощью MessageBox.Show (obj.property) подтвердил, что он действительно возвращает искомое значение. Я что-то упустил или это должно сработать? Кстати, может быть, есть лучший способ сделать отступ, но это не то, что мне нужно в данный момент, спасибо!
Код следует:
</p>
<p>public partial class InteriorsCategory : ActiveRecord, IActiveRecord
{
public string ListDisplay
{
get
{
string returnValue = "";</p>
<pre><code> for (int i = 1; i < this.SpecLevel; i++)
{
returnValue += " ";
}
returnValue += this.CategoryName;
return returnValue;
}
}
}
</code>
</p>
<p><></p>
<p>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.</p>
<p>
private void FillCategories()
{
lstPackageCategories.DataSource = new InteriorsCategoryCollection().Load();
lstPackageCategories.DisplayMember = "CategoryName";
lstPackageCategories.ValueMember = "Id";<br>
((InteriorsCategoryCollection)(lstPackageCategories.DataSource)).Sort("SpecSection", true);<br>
lstPackageCategories.SelectedItem = lstPackageCategories.Items[0];</p>
<code> currentCategory = (InteriorsCategory)lstPackageCategories.SelectedItem;
RefreshAvailableItems();
}