статические переменные как заголовок TemplateFields в виде grdiv asp.net - PullRequest
1 голос
/ 17 марта 2011

У меня есть приложение asp.net, где у меня есть редактируемый вид сетки с опциями редактирования, удаления, добавления. эта сетка имеет как обычно поля шаблона. У меня также есть статический класс, который имеет статические строковые переменные. Я хочу сохранить значение этих статических переменных в качестве текста заголовка поля шаблона. Итак, я импортировал пространство имен моего константного класса по:

<%@ Import Namespace="ConstantManagerNamespace" %>

Тогда я попробовал для того же столбца:

1. <asp:TemplateField HeaderText=<%=ConstantManager.Name%>>

2. <asp:TemplateField HeaderText='<%=ConstantManager.Name%>'>

3. <asp:TemplateField HeaderText=<% ConstantManager.Name %>>

4. <asp:TemplateField HeaderText='<% ConstantManager.Name%>'>

  all probable syntax to access my constant variable value but

Я получил ошибку парсера:

Literal content ('<asp:TemplateField HeaderText=') is not allowed within a 'System.Web.UI.WebControls.DataControlFieldCollection'.

как это сделать?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2011

Лучше связывать переменные статического класса в событии GridView RowDataBound,

проверьте, что тип строки является заголовком, т. Е.

 if (e.Row.RowType == DataControlRowType.Header)
    {
       e.Row.Cells[0].Text = ConstantManager.Name;                  
    }
0 голосов
/ 25 марта 2011

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

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

Конечный результат должен выглядеть примерно так:

<asp:TemplateField HeaderText="<$ ConstantManager:Name >">

Что абсолютно допустимо в aspx-файле, если вы определили конструктор пользовательских выражений с префиксом "ConstantManager".

Фактический пример создания построителя пользовательских выражений можно найти здесь: ExpressionBuilder Class .

Сложение

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

Просто используйте этот синтаксис в разметке aspx:

<asp:TemplateField HeaderText="<# ConstantManager.Name >">

И, при загрузке страницы, позвоните:

protected void Page_Load(object sender, System.EventArgs e)
{
    this.DataBind();
}

Лично мне не нравится это решение из-за части Page_Load. Во всяком случае, для этого не нужно ничего специально объявлять / кодировать по сравнению с пользовательскими выражениями.

Надеюсь, это поможет!

...