Как получить доступ к управлению в Templatefield Gridview с помощью пользовательского идентификатора - PullRequest
3 голосов
/ 31 декабря 2010

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

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.such как ColumnBound.пример:

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

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

1 Ответ

1 голос
/ 31 декабря 2010

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

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

  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, который будет принимать поля сортировки (если таковые имеются) для столбцов шаблона.

...