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
中阅读有关用户控件的更多信息
我对 ASP.NET 完全陌生。我正在构建 4 页。应该将 gridview
导入页面。并且有一个class保存它。在另一页中,我应该得到 gridview
。但是当我加载页面时出现错误:
RegisterRequiresControlState
can only be called before and duringPreRender
.
这是我的页面加载代码:
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
中阅读有关用户控件的更多信息