Пользовательский ListView для одновременного отображения EmptyDataTemplate и InsertItemTemplate - PullRequest
2 голосов
/ 01 октября 2010

Известно, что элемент управления ListView не может одновременно отображать как EmptyDataTemplate, так и InsertItemTemplate.

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

Я уже реализовал различные решения, например, поместил PlaceHolder в шаблон LayoutTemplate, а затем показал вручнуюили скрытие этого PlaceHolder в коде позади, в зависимости от того, есть ли данные или нет.

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

Я считаю, что есть только два способа добиться того, чего я хочу:

  1. Первый способ (предпочтительный) - написать этот пользовательский элемент управления самостоятельно.Я думал о выводе из ListView и переопределении функции, отвечающей за отключение EmptyDataTemplate, но у меня нет опыта работы с пользовательскими элементами управления.И я даже не уверен, что в конце концов это сработает.

  2. Второй способ - использовать пользовательский элемент управления, найденный или купленный где-то.Я не смог найти такой элемент управления, который имеет те же базовые возможности, что и ListView.

Кто-нибудь знает, как решить # 1 и, возможно, # 2?

Спасибо.

Ответы [ 3 ]

3 голосов
/ 06 октября 2010

Вот что я в итоге сделал:

public class MyListView : ListView
{
    protected override int CreateChildControls(IEnumerable dataSource, bool dataBinding)
    {
        int itemCount = base.CreateChildControls(dataSource, dataBinding);

        if (this.InsertItemPosition != InsertItemPosition.None && itemCount == 0)
        {
            CreateEmptyDataItem();
        }

        return itemCount;
    }
}

Отлично работает!

1 голос
/ 06 октября 2010

Я бы выбрал ваш вариант 1. Создайте пользовательский элемент управления. Поскольку вы не указали язык программирования, который я создал в VB.NET:

1002 *

Просто протестировал его и работает отлично, он можетпросто замените существующий ListView.

Как вы можете видеть, он проверяет, есть ли какие-либо данные, и если нет, то вставляет метку с текстом «Данные не найдены».Я не нашел простой способ использовать EmptyDataTemplate для этого, это было бы лучшим вариантом, но это может уже работать для вас.

Другой вариант - скрыть InsertItem (InsertItemPosition.None), если естьнет данных, и добавьте кнопку «Вставить» к EmptyDataTemplate, которая включает InsertItemTemplate и, следовательно, скрывает EmptyDataTemplate.

0 голосов
/ 05 октября 2010

Я не понимаю большую часть ваших требований без скриншота того, чего вы на самом деле пытаетесь достичь.В любом случае, вы можете достичь этого интерфейса с помощью комбинации ListView + FormView или ListView + User Control.Если вы можете предоставить больше информации, я могу помочь в дальнейшем.

...