2010-07-30 6 views
0

эй, я не использую шаблон MVC. Я использую только ASP.net 2.0 C#. Я использую версию jqGrid 3.6.jqGrid Экспорт в Excel в ASP.net 2.0

Я знаю, что есть одно свойство excelexport, которое должно быть установлено true, и мы должны добавить одну настраиваемую кнопку и щелкнуть по этой кнопке, чтобы вызвать метод jqgrid.excelExport. но мне нужно отправить сложный объект на страницу, как мне его отправить? Я не хочу отправлять параметры поиска в строку запроса, потому что мои параметры поиска будут слишком длинными.

ответ

4

Вы можете создать это в C# код:

protected void btnExcel_Click(object sender, EventArgs e) 
    { 

     string codigo; 
     codigo = hdnHtml.Value; 

     StringBuilder sb = new StringBuilder(); 

     StringWriter sw = new StringWriter(sb); 

     HtmlTextWriter htw = new HtmlTextWriter(sw); 

     Page pagina = new Page(); 

     HtmlForm form = new HtmlForm(); 

     Response.Clear(); 

     Response.Buffer = true; 

     Response.ContentType = "application/vnd.ms-excel"; 

     Response.AddHeader("Content-Disposition", "attachment;filename=Visor.xls"); 

     Response.Charset = "UTF-8"; 

     Response.ContentEncoding = Encoding.Default; 


     pagina.EnableEventValidation = false; 

     pagina.DesignerInitialize(); 

     pagina.Controls.Add(form); 

     pagina.RenderControl(htw); 

     Response.Write(codigo); 

     Response.End(); 



    }  

}

В коде позади вы можете повторить это.

Добавить в propiertes страницы:

ValidateRequest = "ложь"

<asp:Button ID="btnExcel" runat="server" Text="Export" 
        onclick="btnExcel_Click" /> //create a button 

<asp:HiddenField ID="hdnHtml" runat="server" /> // create a hiddenField 


$('[id$=btnExcel]').hide(); // hide the button with jquery function 


function exportXls() { 

    var tbody = $("#jQGrid_Visor").html(); 
    var thead = $(".ui-jqgrid-htable").html(); 
    var htmlTable = "<table>" + thead + tbody + "</table>"; 
    var strCopy = htmlTable; 
    $('[id$=hdnHtml]').val(strCopy); // fill the hidden with the table content 
    $('[id$=btnExcel]').click(); // click button hidden 
} 

В моем случае у меня есть меню с правой кнопкой, которая запускает exportXls событие, если вы хотите вы можете оставить с C# не спрятать кнопку

var eventsMenu = { 
      bindings: { 
       'actualizar': function(rowid) { 
        //alert('Accion [Actualizar] del elemento ' + t.id); 
        jQuery('#jQGrid_Visor').setGridParam(rowid).trigger("reloadGrid"); 
       }, 
       **'exportar': function(rowid) { 
        //alert('Accion [Exportar] del elemento ' + rowid.id); 
        exportXls();** 
       }, 
       'full': function(t) { 
        // alert('Accion [Full Screen] del elemento ' + t.id); 
        window.open("./frmBrwVisorMantencionFullScreen.aspx?cod_flota=" + $('[id$=hdnCodFlota]').val(), "Full_Screen", "scrollbars=NO,Resizable=NO,toolbar=no,location=no,directories=no,status=no,menubar=no,fullscreen=yes"); 
       }, 
       'paste': function(t) { 
        alert('Accion [Pegar] del elemento ' + t.id); 
       }, 
       'delete': function(t) { 
        alert('Accion [Eliminar] del elemento ' + t.id); 
       } 
      } 
     }; 
+0

также вы можете htmlencode таблицу, чтобы у вас не было to validaterequest = false. –

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