GridView ItemTemplate字段onPreRender中没有数据

时间:2012-02-22 00:38:39

标签: asp.net gridview itemtemplate

我有这种情况。

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>

我在Page_Load

期间将假数组加载到GridView中
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 个答案:

答案 0 :(得分:3)

您可以像这样放置标签控件:

    <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;
    }