Данные недоступны в GridView ItemTemplate поле onPreRender - PullRequest
1 голос
/ 22 февраля 2012

У меня есть этот сценарий.

Ascx содержит этот GridView:

<asp:GridView ID="dataTable" runat="server" >
    <Columns>
        <asp:TemplateField HeaderText="Key">
            <ItemTemplate>
                <%# ((KeyValuePair<string, string>)(Container.DataItem)).Key%>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Value">
            <ItemTemplate>
                <%# ((KeyValuePair<string, string>)(Container.DataItem)).Value%>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Я загружаю поддельный массив в GridView во время Page_Load

var values = new Dictionary<string, string>();
values.Add("test1", "2");
values.Add("test2", "2");

dataTable.DataSource = values;
dataTable.DataBind();

Если во время OnPreRender я пытаюсь проверить значение

dataTable.Rows[0].Cells[0].Text

, оно не имеет значения.Тогда сетка отрисовывается идеально, и каждое значение на месте.Есть ли способ это исправить?

1 Ответ

3 голосов
/ 22 февраля 2012

Вы можете поместить элемент управления меткой следующим образом:

    <asp:TemplateField HeaderText="Key"> 
        <ItemTemplate>
            <asp:Label runat="server" Text="<%# ((KeyValuePair<string, string>)(Container.DataItem)).Key%>"></asp:Label>
        </ItemTemplate> 
    </asp:TemplateField>

И затем получить доступ к такому значению в PreRender пользовательского элемента управления:

    protected void Page_PreRender(object sender, EventArgs e)
    {
        Label lbl = dataTable.Rows[0].Cells[0].Controls[1] as Label;
        string t = lbl.Text;
    }

Или вот так наPreRender потребительской страницы:

    protected void Page_PreRender(object sender, EventArgs e)
    {
        GridView dataTable = dataTableWebUserControl1.FindControl("dataTable") as GridView;
        Label lbl = dataTable.Rows[0].Cells[0].Controls[1] as Label;
        string t = lbl.Text;
    }
...