我有一组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
的情况下加载我的列?
答案 0 :(得分:0)
以下示例可以为您提供帮助。它使用一个实现ITemplate的类,并允许您使用EditItemTemplates向动态创建的TemplateFields添加控件。
答案 1 :(得分:0)
我不完全确定你在问什么,但是如果你的目标是在GridView中的TemplateField
中显示字段,其中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>