私のページには約 11 個の GridView があります: GridView1、GridView2、... GridView10 および GridViewActive。GridView1 から GridView10 は非表示ですが、GridViewActive は表示されます。さまざまな条件に基づいて、1 つの 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
そしてボタンクリック時 (実際には、ボタンクリックを呼び出すのは Ajax であり、ボタンは実際にはユーザーには見えないため、単純な ButtonClick よりも少し複雑です):
//this block doesn't work for now, because grvActive doesn't have any structure
this.grvActive.DataSource = SqlDataSource1;
this.grvActive.DataBind();
列のみをコピーする必要があります。これに対する解決策は見つかりませんでした。GridView には Clone メソッドが含まれていません。
編集:
GridView1 ~ GridView10 および GridViewActive は動的に作成されません。GridView の例:
<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 を含むものもあれば、TemplateFields をまったく含まないものもあります。