Как получить контроль доступа в сетке поля шаблона с настраиваемым идентификатором

У меня есть настроенная сетка. Моя сетка может сортировать для каждого столбца одним щелчком мыши в заголовке без каких-либо настроек и методов перегрузки, таких как сортировка и т. д., пользователем (программистом). (я делаю это успешно и отлично работаю) пользователи ( программисты), возможно, добавить каждый столбец в сетку, например, поле шаблона, поле гиперссылки, связанное поле ... для сортировки я должен получить доступ к полю данных столбцов. Я могу получить доступ к столбцу привязанного поля с помощью этого кода. я могу получить доступ к полю данных и тексту заголовка и ... образец:

for (int j = 0; j < this.Columns.Count; j++)
                {
                    BoundField bf;
                    bf = this.Columns[j] as BoundField;
                        if (bf != null)
                        {
                            string ht = bf.HeaderText;
                            string df = bf.DataField;
                        }
                 }

но я могу получить доступ к элементу управления в templateField. например, ColumnBound. образец:

  <asp:Label ID="Label1" runat="server" Text='<%# Bind("Name") %>'></asp:Label>

я хочу получить доступ к «Имя» (Bind («Имя») или Eval («Имя»)). как я могу? есть момент: теперь я не знаю, каков идентификатор (в данном случае «Label1») элемента управления в поле шаблона. специальная благодарность


person Mohsen Tavoosi محسن طاوسی    schedule 31.12.2010    source источник


Ответы (1)


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

Если вы возьмете какое-то ограниченное представление, например, только те поля шаблона могут быть отсортированы, где метка и / или привязка привязаны к некоторому полю данных, тогда подход будет

  1. Посмотрите, является ли столбец полем шаблона (var tf = this.Columns[j] as TemplateField)
  2. Если да, возьмите шаблон (используйте свойство ItemTemplate)
  3. Итерируйте рекурсивно через дочерние элементы управления шаблона, если вы найдете метку (или скажем, привязку), затем проверьте ее текстовое свойство на предмет выражения привязки данных и получения своего поля данных.

Но этот подход не подходит для такого шаблона, как <img src="Some Icon" /><span><%# Eval("Name") %></span>.

Другой вариант вышеупомянутой техники - взять шаблон элемента поля и затем вызвать метод Render для получения шаблона html, а затем вы можете проанализировать его для поиска выражений привязки данных, а затем определить свои поля данных. Однако у этого подхода есть свои подводные камни - например, такой шаблон, как <img src='<%# Eval("IconType") %>' /><span><%# Eval("Name") %></span>, вероятно, будет использовать вышеуказанную логику для сортировки по полю IconType вместо поля Name.

IMO, более надежный подход будет заключаться в том, чтобы иметь свойство / метод в вашем элементе управления gridview, который будет принимать поля сортировки (если есть) для столбцов шаблона.

person VinayC    schedule 31.12.2010