Объекты ObjectListView невидимы? - PullRequest
1 голос
/ 31 января 2012

По какой-то причине я не могу отобразить какие-либо элементы в ObjectListView.Я создал ObjectListView, установил представление «Подробности» и добавил три столбца, каждый с текстом и заголовком.Затем я использовал этот код (чтобы попытаться) добавить элементы:

List<string[]> list = new List<string[]>();
list.Add(new string[] { "col1", "col2", "col3" });
list.Add(new string[] { "col1", "col2", "col3" });

releases_ListView.AddObjects(list);

Когда я пытаюсь releases_ListView.Items.Count, я получаю '2', поэтому элементы добавляются в коллекцию, но по какой-то причине сам элемент управления остаетсяпустой.Я также играл с включением / отключением сортировки / группировки и использованием Refresh() или Update(), но с каким-либо результатом ...

Никто не знает этого?Кстати, предметы определенно добавлены.Я получаю поле выбора, когда выбираю первые строки, просто без видимого текста.

Ответы [ 4 ]

3 голосов
/ 03 марта 2012

Это, вероятно, прошло, когда это было бы полезно для оригинального плаката, но у меня была та же проблема, и я сходил с ума.

Там, где необходимо указать имя столбца (открытое свойство объекта, который используется для построения данных столбца), нет в поле NAME и нет в поле TEXT.Я тоже мог видеть строки данных в элементе управления ObjectListView, хотя отображаемый элемент управления представлял собой просто заголовки столбцов и пустые строки.Никакое количество недействительных, обновляющих или других манипуляций не могло привести к получению данных в отображаемой форме.

Итак ... выяснилось, что если вы поместите имя в поле AspectName на Columns Collection черезIDE Columns Collection Editor, затем вуаля .... данные отображаются в элементе управления!Вероятно, есть способ сделать это с помощью программы, но я оставляю это на усмотрение следующего человека, поскольку теперь он делает то, что мне нужно.

0 голосов
/ 01 марта 2018

Вот еще одна оговорка.

Если вы динамически добавляете ObjectListView к динамически создаваемой вкладке в tabControl, вы видите поведение, объясненное в вопросе.

Решение состоит в том, чтобы выбрать вновь созданную вкладку, а затем создать ObjectListView идобавьте его на вкладку.

ctrlTabLogFiles.TabPages.Add(key, name);
var tab = ctrlTabLogFiles.TabPages[key];
ctrlTabLogFiles.SelectedTab = tab;
var gridCtrl = new GridWrapperControl();
tab.Controls.Add(gridCtrl);

И после этого вы можете добавить свои заголовки и данные, как и раньше.

0 голосов
/ 02 октября 2014

Также вряд ли поможет ОП, но еще один пост для будущих прохожих:

Я нашел лучший способ сделать это программно - использовать атрибуты OLVColumn в классе вашей модели.

Например, возьмите следующий класс:

public class ModelClass
{
    [OLVColumn(isVisible=false)]
    public string Id {get;set;}

    [OLVColumn()]
    public string Name {get;set;}

    [OLVColumn()]
    public string Email {get;set;}
}

Когда столбцы создаются формой / представлением с использованием следующей строки кода, любое свойство, помеченное атрибутом OLVColumn (), будет добавлено в виде столбца.

Generator.GenerateColumns(this.objectListView1,typeof(ModelClass));

Вы также можете использовать этот оператор, чтобы просто сгенерировать столбец для каждого свойства в классе:

Generator.GenerateColumns(this.objectListView1, typeof(ModelClass), true);

Исходное поведение OP - отсутствие отображения в ObjectListView, когда коллекция элементов содержит элементы, - связано с тем, что ObjectListView не имеет ни одного столбца, назначенного либо во время разработки, используя AspectName, как указано в ToniMarieM, либо не включил атрибут OLVColumn, если Вы используете генератор. Это также происходит, если вы используете второй пример генератора и передаете false в качестве третьего параметра.

0 голосов
/ 31 января 2012

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

Вы можете сделать следующее:

использовать ListViewItem.SubItems свойство для объявлений "col2" и "col3" для каждого подэлемента "col1"

В ссылке вы можете увидеть пример, как это сделать.

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