2013-10-08 6 views
0

Внутри 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); 
    } 
} 
+0

если вы делаете полный пост обратно, вы уверены, что у вас еще есть данные, которые должны вновь связываться список? – NoviceProgrammer

+0

Возможно? Я добавил if (IsPostBack) {runreport (null, null)} в Page_Load, но это не решило проблему. – fcholmes

+0

Покажите также свой метод 'Page_Load'. –

ответ

0

<Triggers> <asp:PostBackTrigger ControlID="export" onclick ="CLick" /> </Triggers>

+0

onclick недействительный атрибут для asp: PostBackTrigger – fcholmes

+0

Ах получил это. EventName является атрибутом для AsyncPostBackTrigger, а не для PostBackTrigger. – fcholmes

+0

vippz

Смежные вопросы