我有这种情况。
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
它没有价值。然后网格完美呈现,每个值都到位。 有没有什么办法解决这一问题?
答案 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;
}