单击按钮将错误的 DataTable 导出到 Excel
Button click pulls wrong DataTable for export into Excel
我正在从网络中提取公司日程数据 API 并格式化数据,以便它可以在本地站点上整齐地显示,也可以导出到 excel 模板以分发到公司。
我在网站底部添加了一个按钮来显示前几周的日程安排,另一个按钮用于将数据导出到 excel。单击“上周”时,它会使用上周的数据填充同一个 Gridview1 table。但是当我单击导出按钮时,它会将本周的数据导出到 Excel.
这是我的一些代码,让我知道我还需要什么 post 来寻求帮助。
数据table 在页面加载到 gridview 时设置:
protected void Page_Load(object sender, EventArgs e)
{
// ..... bunch of code above to call web API for date range and format table....
DataView view = table.AsDataView();
view.Sort = "Sort ASC";
GridView1.DataSource = view;
GridView1.DataBind();
if (GridView1.Columns.Count > 0)
GridView1.Columns[8].Visible = false;
else
{
GridView1.HeaderRow.Cells[8].Visible = false;
foreach (GridViewRow gvr in GridView1.Rows)
{
gvr.Cells[8].Visible = false;
}
}
gridview 被拉入数据table 并发送到 excel 电子表格
protected void ExportExcel(object sender, EventArgs e)
{
DataTable dt = new DataTable("Resident Schedule");
foreach (TableCell cell in GridView1.HeaderRow.Cells)
{
dt.Columns.Add(cell.Text);
}
foreach (GridViewRow row in GridView1.Rows)
{
dt.Rows.Add();
for (int i = 0; i < row.Cells.Count; i++)
{
dt.Rows[dt.Rows.Count - 1][i] = row.Cells[i].Text;
}
}
dt.Columns.Remove("Rotation");
dt.Columns.Remove("Sort");
using (XLWorkbook wb = new XLWorkbook(@"C:\template.xlsx"))
{
IXLWorksheet ws = wb.Worksheet("Resident Schedule");
var rangeWithStrings = ws.Cell(5, 2).InsertTable(dt.AsEnumerable(), false);
// ..... bunch of code below
现在我有一个按钮单击方法,该方法被调用以将前一周加载到 GridView 中:
protected void PreviousWeek(object sender, EventArgs e)
{
// ..... bunch of code above to pull and sort last weeks schedule....
DataView view = table.AsDataView();
view.Sort = "Sort ASC";
GridView1.DataSource = view;
GridView1.DataBind();
if (GridView1.Columns.Count > 0)
GridView1.Columns[8].Visible = false;
else
{
GridView1.HeaderRow.Cells[8].Visible = false;
foreach (GridViewRow gvr in GridView1.Rows)
{
gvr.Cells[8].Visible = false;
}
}
所以,我的问题是,如果单击按钮会重新填充 GridView1 数据,为什么 ExportExcel 方法会返回到页面加载数据?
点击按钮,发送回发事件,你似乎错过了检查请求是否回发。因此,无论何时单击按钮,gridview 都会填充当前周的数据。检查回发请求,然后在加载事件时填充 gridview。
if (!IsPostBack)
{
// GridView Populate code
}
我正在从网络中提取公司日程数据 API 并格式化数据,以便它可以在本地站点上整齐地显示,也可以导出到 excel 模板以分发到公司。
我在网站底部添加了一个按钮来显示前几周的日程安排,另一个按钮用于将数据导出到 excel。单击“上周”时,它会使用上周的数据填充同一个 Gridview1 table。但是当我单击导出按钮时,它会将本周的数据导出到 Excel.
这是我的一些代码,让我知道我还需要什么 post 来寻求帮助。
数据table 在页面加载到 gridview 时设置:
protected void Page_Load(object sender, EventArgs e)
{
// ..... bunch of code above to call web API for date range and format table....
DataView view = table.AsDataView();
view.Sort = "Sort ASC";
GridView1.DataSource = view;
GridView1.DataBind();
if (GridView1.Columns.Count > 0)
GridView1.Columns[8].Visible = false;
else
{
GridView1.HeaderRow.Cells[8].Visible = false;
foreach (GridViewRow gvr in GridView1.Rows)
{
gvr.Cells[8].Visible = false;
}
}
gridview 被拉入数据table 并发送到 excel 电子表格
protected void ExportExcel(object sender, EventArgs e)
{
DataTable dt = new DataTable("Resident Schedule");
foreach (TableCell cell in GridView1.HeaderRow.Cells)
{
dt.Columns.Add(cell.Text);
}
foreach (GridViewRow row in GridView1.Rows)
{
dt.Rows.Add();
for (int i = 0; i < row.Cells.Count; i++)
{
dt.Rows[dt.Rows.Count - 1][i] = row.Cells[i].Text;
}
}
dt.Columns.Remove("Rotation");
dt.Columns.Remove("Sort");
using (XLWorkbook wb = new XLWorkbook(@"C:\template.xlsx"))
{
IXLWorksheet ws = wb.Worksheet("Resident Schedule");
var rangeWithStrings = ws.Cell(5, 2).InsertTable(dt.AsEnumerable(), false);
// ..... bunch of code below
现在我有一个按钮单击方法,该方法被调用以将前一周加载到 GridView 中:
protected void PreviousWeek(object sender, EventArgs e)
{
// ..... bunch of code above to pull and sort last weeks schedule....
DataView view = table.AsDataView();
view.Sort = "Sort ASC";
GridView1.DataSource = view;
GridView1.DataBind();
if (GridView1.Columns.Count > 0)
GridView1.Columns[8].Visible = false;
else
{
GridView1.HeaderRow.Cells[8].Visible = false;
foreach (GridViewRow gvr in GridView1.Rows)
{
gvr.Cells[8].Visible = false;
}
}
所以,我的问题是,如果单击按钮会重新填充 GridView1 数据,为什么 ExportExcel 方法会返回到页面加载数据?
点击按钮,发送回发事件,你似乎错过了检查请求是否回发。因此,无论何时单击按钮,gridview 都会填充当前周的数据。检查回发请求,然后在加载事件时填充 gridview。
if (!IsPostBack)
{
// GridView Populate code
}