ASP.Net GridView: BoundField с использованием индексатора вместо свойства - PullRequest
0 голосов
/ 06 марта 2012

У меня есть класс, где большинство его данных содержится в словаре, например:

public class Document
{
    public string this[string key]
    {
        get { return (details.ContainsKey(key)) ? details[key] : null; }
    }

    public long DocumentId { get; set; }

    private Dictionary<string, string> details = new Dictionary<string, string>();
    public Dictionary<string, string> Details { get { return details; } }
}

Мне нужно будет связать эти объекты с GridView, где я динамически настраиваю отображаемые столбцы.

Мой вопрос: как мне настроить GridView, чтобы он обращался к индексатору для извлечения его данных (например, если я хотел, чтобы столбец отображался на значение в словаре Details с ключом «DocumentName» «):

BoundField bf = new BoundField();
bf.DataField = "DocumentName";
bf.HeaderText = "Document Name";

myGridView.Columns.Add(bf);

Это не будет работать, так как «DocumentName» не является свойством Document. Я знаю, что если бы эти столбцы были жестко запрограммированы, я мог бы просто использовать <%# Eval("[DocumentName]") %> на странице, чтобы он смотрел на индексатор, но как мне сделать это с помощью кода?

Или я вынужден создать столбец Шаблон, добавить метку и заполнить его при создании каждой строки?

1 Ответ

1 голос
/ 06 марта 2012

Да, использование шаблона, как вы предложили, и заполнение кода-это один из способов.Другой способ - программно сгенерировать объект DataTable из предоставленных данных и связать его с сеткой.Иногда это может быть полезным решением.

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