2009-02-24 2 views
1

Мне нужно создать лист Excel во время RunTime на событии ItemCommand_click в GridView и передать файл, а затем повторно привязать GridView с изменением статуса.Работа с Gridviews и передачами файлов

Как мы перенаправляем ответ с передачей файлов, как я могу обновить GridView?

ответ

2

Я искал, чтобы сделать что-то очень похожее на выбранное изменение индекса в строках для вывода отчета службы отчетов в формате PDF. Я мог только заставить это работать с response.redirect на другую страницу, которая обрабатывала вывод файла. Похоже, что ваша проблема действительно становится переделкой сетки после изменения статуса, если вы ответите.неправильно, вы не можете коснуться своей сетки ...

Посмотрите на этот код. Я нашел его на encosia.com. Похоже, вы можете использовать iFrame для своего вывода, а затем вы можете использовать вызов JavaScript для обратной передачи страницы, чтобы, возможно, перестроить сетку.

<html> 
<body> 
<form id="form1" runat="server"> 
<asp:ScriptManager runat="server" /> 
<script language="javascript"> 
    // Get a PageRequestManager reference. 
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 

    // Hook the _initializeRequest event and add our own handler. 
    prm.add_initializeRequest(InitializeRequest); 

    function InitializeRequest(sender, args) 
    { 
    // Check to be sure this async postback is actually 
    // requesting the file download. 
    if (sender._postBackSettings.sourceElement.id == "DownloadFile") 
    { 
     // Create an IFRAME. 
     var iframe = document.createElement("iframe"); 

     // Get the desired region from the dropdown. 
     var region = $get("Region").value; 

     // Point the IFRAME to GenerateFile, with the 
     // desired region as a querystring argument. 
     iframe.src = "GenerateFile.aspx?region=" + region; 

     // This makes the IFRAME invisible to the user. 
     iframe.style.display = "none"; 

     // Add the IFRAME to the page. This will trigger 
     // a request to GenerateFile now. 
     document.body.appendChild(iframe); 
    } 
    } 
</script> 
<asp:UpdatePanel runat="server"> 
    <ContentTemplate> 
    <asp:DropDownList runat="server" ID="Region"> 
     <asp:ListItem Value="N">North Region</asp:ListItem> 
     <asp:ListItem Value="W">West Region</asp:ListItem> 
     <asp:ListItem Value="SE">Southeast Region</asp:ListItem> 
    </asp:DropDownList> 
    <asp:Button runat="server" ID="DownloadFile" Text="Generate Report" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 
</form> 
</body> 
</html> 

страница, которая обрабатывает загрузку ...

protected void Page_Load(object sender, EventArgs e) 
{ 
    string FileResponse; 
    string Region = Request.QueryString["Region"]; 

    // Code here to fill FileResponse with the 
    // appropriate data based on the selected Region. 

    Response.AddHeader("Content-disposition", "attachment; filename=report.csv"); 
    Response.ContentType = "application/octet-stream"; 
    Response.Write(FileResponse); 
    Response.End(); 
} 
+0

логика lloks хорошо ... Постараюсь это один BTW Я думаю, что скорее создание .aspx для обработки файлов, мы можем пойти на .ashx (обработчик HTTP); ват сказал ??? – Novice

+0

Я не уверен. Не слишком много работали в этой области, но это может сработать для вас. – RSolberg