Добавление TemplateField в GridView во время выполнения - PullRequest
1 голос
/ 07 января 2012

У меня есть набор GridViews и DataSources, которые совместно используют несколько столбцов и настроек, поэтому я объединил их все в один UserControl, который я дал DataControlFieldCollection, чтобы позволить мне добавлять столбцы в файл aspx.Таким образом, я могу сделать это:

<mine:PreGeneratedGridView runat="server">
    <Columns>
        <asp:BoundField DataField="mycolumn"
            HeaderText="My Header" SortExpression="mycolumn" />
    </Columns>
</mine:PreGeneratedGridView>

Я использую этот код для перемещения дополнительных столбцов в GridView, который содержится в моем PreGeneratedGridView UserControl:

    protected void Page_Load(object sender, EventArgs e)
    {
        for (int i = 0; i < Columns.Count; ++i)
        {
            if (IsPostBack) myGridView.Columns.RemoveAt(i);
            myGridView.Columns.Insert(i, Columns[i]);
        }
    }

Мне немного некрасиво (и, вероятно, неправильно, хотя это, кажется, работает) добавлять столбцы к GridView при каждой загрузке страницы, но когда я попытался поместить этот код загрузки столбцов в Page_Initон препятствовал запуску столбцов типа TemplateField (т. е. столбцы были пустыми, хотя заголовок не был) во время PostBack.

Есть ли способ загрузить мои столбцы без использования Page_Load /IsPostBack таким образом?

Ответы [ 2 ]

0 голосов
/ 15 марта 2012

Я не совсем уверен, что вы спрашиваете, но если ваша цель состоит в отображении полей в TemplateField в GridView, где GridView связан с анонимным типом, вы можете написать что-то вроде этого, используяEval метод:

// Code to bind GridView
gv.DataSource = foo.Select( x => new {
    field1 = x.boomboom(),
    field2 = x.scramble() };
gv.DataBind;

<%-- code in your ASP.net codebehind --%>
    <asp:TemplateField>
        <ItemTemplate>
            <%# Eval("field1").ToString() %>
        </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField>
        <ItemTemplate>
            <%# Eval("field12).ToString() %>
        </ItemTemplate>
    </asp:TemplateField>
0 голосов
/ 07 января 2012

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

Как добавить ComboBox в несвязанный GridView asp.net

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