Внутри UpdatePanel
Я пытаюсь как привязать к ListView
, так и экспортировать его содержимое в Excel. Эти функции работают нормально независимо (моя кнопка «Запустить отчет» связывает ListView
, кнопка «Экспорт в Excel» экспортирует файл .xlsx с использованием EPPlus). Для того чтобы экспорт .xlsx работал, мне пришлось создать <Triggers> Postback
для кнопки «Экспорт в Excel».Метод UpdatePanel не запускается
Я хочу, чтобы кнопка «Экспорт в Excel» привязывала ListView
и экспортировала .xlsx. Я добавил метод, который связывает ListView
в методе экспорта, но, похоже, его пропускает. Я думаю, что не понимаю какую-то часть PostBack.
Вот <Trigger>
:
<Triggers>
<asp:PostBackTrigger ControlID="export" />
</Triggers>
Вот ListView
обязывать:
public void runreport(object sender, EventArgs e)
{
reportlv.DataSource = null;
reportlv.DataBind();
bindreportlv();
elreportdiv.Visible = true;
}
Вот метод экспорта с помощью метода runreport внедренный:
protected void export_Click(object sender, EventArgs e)
{
runreport(null, null);
ExcelPackage pck = new ExcelPackage();
ExcelWorksheet ws = pck.Workbook.Worksheets.Add("worksheet");
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("Date", typeof(string)));
dt.Columns.Add(new DataColumn("Payee", typeof(string)));
dt.Columns.Add(new DataColumn("Amount", typeof(string)));
foreach (ListViewDataItem li in reportlv.Items)
{
if (li.ItemType == ListViewItemType.DataItem)
{
DataRow dr = dt.NewRow();
dr["Date"] = ((Label)li.FindControl("lbldate")).Text.ToString();
dr["Payee"] = ((Label)li.FindControl("lblpayee")).Text.ToString();
dr["Amount"] = ((Label)li.FindControl("lblamt")).Text.ToString();
dt.Rows.Add(dr);
}
}
ws.Cells["A1"].LoadFromDataTable(dt, true);
pck.SaveAs(Response.OutputStream);
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=summary.xlsx");
Response.Flush();
Response.End();
}
Вот кнопки:
<asp:Button runat="server" ID="run" OnClick="runreport" CssClass="button" Text="Run Report" />
<asp:Button runat="server" ID="export" OnClick="export_Click" CssClass="button" Text="Export to Excel" />
Update
Вот метод Page_Load:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
runreport(null, null);
}
}
если вы делаете полный пост обратно, вы уверены, что у вас еще есть данные, которые должны вновь связываться список? – NoviceProgrammer
Возможно? Я добавил if (IsPostBack) {runreport (null, null)} в Page_Load, но это не решило проблему. – fcholmes
Покажите также свой метод 'Page_Load'. –