ASP.NET 将网格视图添加到面板

ASP.NET Adding gridview to panel

我对 ASP.NET 完全陌生。我正在构建 4 页。应该将 gridview 导入页面。并且有一个class保存它。在另一页中,我应该得到 gridview。但是当我加载页面时出现错误:

RegisterRequiresControlState can only be called before and during PreRender.

这是我的页面加载代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (Data._grid != null)
    {
         p1.Controls.Add(Data._grid);
    }
    else
    {
    }
}

对于 aspx:

<asp:Panel runat="server" ID="p1"></asp:Panel>

这里是保存gridview到class的代码:

protected void import_btn_Click(object sender, EventArgs e)
    {
        string filepath = ConfigurationManager.AppSettings["FilePath"].ToString();
        string filename = string.Empty;
        string[] allowedfile = { ".xls", ".xlsx" };
        string filetext = Path.GetExtension(FileUpload1.PostedFile.FileName);
        if (!allowedfile.Contains(filetext))
        {

        }
        else
        {
            int filesize = FileUpload1.PostedFile.ContentLength;
            if (filesize <= 1048576)
            {
                filename = Path.GetFileName(Server.MapPath(FileUpload1.FileName));
                FileUpload1.SaveAs(Server.MapPath(filepath) + filename);
                string _filepath = Server.MapPath(filepath) + filename;
                OleDbConnection con = null;
                if (filetext == ".xls")
                {
                    con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + _filepath + ";Extended Properties=Excel 8.0");
                }
                else if (filetext == ".xlsx")
                {
                    con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + _filepath + "';Extended Properties=Excel 12.0;");
                }
                con.Open();
                DataTable dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                string get_sheet = dt.Rows[0]["Table_Name"].ToString();
                OleDbCommand excelcommand = new OleDbCommand(@"SELECT * FROM [" + get_sheet + @"]", con);
                OleDbDataAdapter exceladapter = new OleDbDataAdapter(excelcommand);
                DataSet exceldataset = new DataSet();
                exceladapter.Fill(exceldataset);
                con.Close();
                grid.DataSource = exceldataset;
                grid.DataBind();
                Data._grid = grid;
            }
        }

您不能将控件从一个页面导入到另一个页面。您可以制作可重用的用户控件 .ascx 并在不同的页面中使用它们。

在您的情况下,您可以制作一个具有 GridView 的网络用户控件,并在两个页面中添加该用户控件,就像我们使用 asp.net 网络控件一样。在这篇 MSDN 文章 ASP.NET User Controls Overview

中阅读有关用户控件的更多信息