我的页面上有大约 11 个 GridView:GridView1、GridView2、... GridView10 和 GridViewActive。GridView1 到 GridView10 是不可见的,但 GridViewActive 是可见的。根据不同的情况,我需要将一个 GridView 的结构复制到 GridViewActive。我需要做类似的事情
//common params
SqlDataSource1.SelectParameters["CommonParam1"].DefaultValue = this.commonParam1;
if (reportname = "report1")
{
SqlDataSource1.SelectParameters["Param"].DefaultValue = this.param;
CopyGridViewStructure(GridView1, GridViewActive);
}
else if (reportname = "report2")
{
SqlDataSource1.SelectParameters["AnotherParam"].DefaultValue = this.anotherParam;
CopyGridViewStructure(GridView2, GridViewActive);
}
etc.
// DO OTHER STAFF WITH GRIDVIEWATIVE HERE AND IN OTHER METHODS
在按钮单击时(实际上它比简单的 ButtonClick 复杂一点,因为它是调用 Button click 的 Ajax,并且按钮实际上对用户是不可见的):
//this block doesn't work for now, because grvActive doesn't have any structure
this.grvActive.DataSource = SqlDataSource1;
this.grvActive.DataBind();
我只需要复制列。还没有找到解决方案。GridView 不包含克隆方法。
编辑:
GridView1 到 GridView10 和 GridViewActive 不是动态创建的。网格视图示例:
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" Visible="false">
<Columns>
<asp:BoundField DataField="username" HeaderText="First Name">
<ItemStyle Width="110px"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="usersurname" HeaderText="Last Name">
<ItemStyle Width="110"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="usertype" HeaderText="User Type">
<ItemStyle Width="100px"></ItemStyle>
</asp:BoundField>
<asp:TemplateField HeaderText="Login">
<ItemTemplate>
<asp:Label runat="server" ID="lblLastModifyDate" Text='<%# MyUtility.MyCommon.FormatDate(Eval("logindate").ToString()) %>' />
</ItemTemplate>
<ItemStyle Width="177px"></ItemStyle>
</asp:TemplateField>
</Columns>
</asp:GridView>
其他 GridView 非常相似,但具有不同的列名和数据字段。其中一些包含不同的 TemplateField,有些根本没有 TemplateField。