2012-11-09 88 views
0

我有一個AsyncFileUpload控制和對我的asp.net Web窗體 GridView中上傳文件,我試圖加載我的GridView與上傳的文件列表後asp.net GridView和AJAX控件-AsyncFileUpload

但向gridview顯示上傳文件的列表不起作用。 當我調試時,我可以在綁定到gridView之前看到預期的數據。 但我不能看到上傳的文件列表中的GridView控件。請幫助

粘貼下面是我的表單,我的CS文件

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm2.aspx.cs" Inherits="test.WebForm2" %> 
<%@ Register Assembly="AjaxControlToolkit" 
    Namespace="AjaxControlToolkit" TagPrefix="cc1" %> 
<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <cc1:AsyncFileUpload ID="AsyncFileUpload1" Width="400px" runat="server" 
OnClientUploadError="uploadError" OnClientUploadStarted="StartUpload" 
OnClientUploadComplete="UploadComplete" 
CompleteBackColor="Lime" UploaderStyle="Modern" 
ErrorBackColor="Red" ThrobberID="Throbber" 
onuploadedcomplete="AsyncFileUpload1_UploadedComplete" 
UploadingBackColor="#66CCFF" OnDataBinding="AsyncFileUpload1_DataBinding" /> 
    </div> 
     <div> 
      <asp:Label ID="lblStatus" runat="server" Style="font-family: Arial; 
    font-size: small;"></asp:Label> 


     </div> 
       <div class="width100pc floatLeft"> 
       <asp:GridView ID="grdAttachments" runat="server" ShowFooter="true" AutoGenerateColumns="false" 
        ForeColor="#333333" GridLines="None" CellPadding="2" CellSpacing="0" OnRowDeleting="grdAttachments_RowDeleting" 
        ShowHeaderWhenEmpty="true" EmptyDataText="No attachments to show" Width="100%" OnLoad="grdAttachments_Load" OnRowDataBound="grdAttachments_RowDataBound"> 
        <Columns> 
         <asp:BoundField DataField="RowNumber" HeaderText="Row Number" ItemStyle-CssClass="displayNone" 
          HeaderStyle-CssClass="displayNone" FooterStyle-CssClass="displayNone" /> 
         <asp:BoundField HeaderText="File name" HeaderStyle-HorizontalAlign="Left" HeaderStyle-CssClass="width100pc" 
          ItemStyle-CssClass="width100pc" DataField="FileUpload" /> 
         <asp:BoundField DataField="UploadedFullFileName" HeaderText="UploadedFullFileName" 
          ItemStyle-CssClass="displayNone" HeaderStyle-CssClass="displayNone" FooterStyle-CssClass="displayNone" /> 
         <asp:CommandField ShowDeleteButton="true" DeleteText="Remove" ItemStyle-HorizontalAlign="Center" /> 
        </Columns> 
        <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" /> 
        <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" /> 
        <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" HorizontalAlign="Left" /> 
       </asp:GridView> 
      </div> 
    </form> 
</body> 
</html> 
<script type="text/javascript" language="javascript"> 

    function uploadError(sender, args) { 
     document.getElementById('lblStatus').innerText = args.get_fileName(), 
      "<span style='color:red;'>" + args.get_errorMessage() + "</span>"; 
    } 

    function StartUpload(sender, args) { 
     document.getElementById('lblStatus').innerText = 'Uploading Started.'; 
    } 

    function UploadComplete(sender, args) { 
     var filename = args.get_fileName(); 
     var contentType = args.get_contentType(); 
     var text = "Size of " + filename + " is " + args.get_length() + " bytes"; 
     if (contentType.length > 0) { 
      text += " and content type is '" + contentType + "'."; 
     } 
     document.getElementById('lblStatus').innerText = text; 
    } 

</script> 

粘貼下面是CS文件

using System; 
using System.Collections.Generic; 
using System.Configuration; 
using System.Data; 
using System.IO; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace test 
{ 
    public partial class WebForm2 : System.Web.UI.Page 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 
     protected void AsyncFileUpload1_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e) 
     { 
      string uniquePath = Path.Combine(ConfigurationManager.AppSettings["fileUploadPath"].ToString(), Session.SessionID); 

      if (AsyncFileUpload1.HasFile) 
      { 
       //string strPath = uniquePath + Path.GetFileName(e.FileName); 
       //AsyncFileUpload1.SaveAs(strPath); 
       AddNewARowToGrid(); 
      } 
     } 

     public void AddNewARowToGrid() 
     { 
      DataTable dtAttachments = new DataTable(); 
      int rowNumber = 1; 
      string uploadedFullFileName = string.Empty; 

      if (ViewState["CurrentATable"] != null) 
      { 
       dtAttachments = (DataTable)ViewState["CurrentATable"]; 
       rowNumber = dtAttachments.Rows.Count + 1; 
      } 
      else 
      { 
       dtAttachments.Columns.Add(new DataColumn("RowNumber", typeof(string))); 
       dtAttachments.Columns.Add(new DataColumn("FileUpload", typeof(string))); 
       // dtAttachments.Columns.Add(new DataColumn("Description", typeof(string))); 
       dtAttachments.Columns.Add(new DataColumn("UploadedFullFileName", typeof(string))); 
      } 

      try 
      { 
       string uniquePath = Path.Combine(ConfigurationManager.AppSettings["fileUploadPath"].ToString(), Session.SessionID); 
       if (!Directory.Exists(uniquePath)) 
        Directory.CreateDirectory(uniquePath); 
       uploadedFullFileName = Path.Combine(uniquePath, AsyncFileUpload1.FileName); 
       AsyncFileUpload1.PostedFile.SaveAs(uploadedFullFileName); 
      } 
      catch (Exception ex) 
      { 
           return; 
      } 

      DataRow drNewRow = dtAttachments.NewRow(); 

      drNewRow["RowNumber"] = rowNumber; 
      drNewRow["FileUpload"] = AsyncFileUpload1.PostedFile.FileName; 
      //drNewRow["Description"] = txtDescription.Text; 
      drNewRow["UploadedFullFileName"] = uploadedFullFileName; 

      dtAttachments.Rows.Add(drNewRow); 

      // txtDescription.Text = string.Empty; 

      ViewState["CurrentATable"] = dtAttachments; 
      Session["CurrentATable"] = dtAttachments; 

      BindDataGrid(grdAttachments, dtAttachments); 
     } 
     private void RemoveNewARowToGrid(string rowNumber) 
     { 
      if (ViewState["CurrentATable"] != null) 
      { 
       DataTable dtCurrentTable = (DataTable)ViewState["CurrentATable"]; 
       DataRow rowToDelete = null; 

       if (dtCurrentTable.Rows.Count > 0) 
       { 
        foreach (DataRow row in dtCurrentTable.Rows) 
        { 
         if (int.Parse(row["RowNumber"].ToString()) == int.Parse(rowNumber)) 
         { 
          rowToDelete = row; 
          break; 
         } 
        } 
        if (rowToDelete != null) 
        { 
         dtCurrentTable.Rows.Remove(rowToDelete); 

         ViewState["CurrentATable"] = dtCurrentTable; 

         if (dtCurrentTable.Rows.Count == 0) 
          LoadEmptyAttachmentSection(); 
         else 
          BindDataGrid(grdAttachments, dtCurrentTable); 
        } 
       } 
      } 
     } 



     private void BindDataGrid(GridView grd, DataTable dataTable) 
     { 
      if (null != Session["CurrentATable"]) 
      { 
       dataTable = (DataTable)Session["CurrentATable"]; 
      } 
      grdAttachments.DataSource = dataTable; 
      grdAttachments.DataBind(); 

     } 
     private void LoadEmptyAttachmentSection() 
     { 
      try 
      { 
       DataTable dtAttachments = new DataTable(); 
       BindDataGrid(grdAttachments, dtAttachments); 
      } 
      catch (Exception ex) 
      { 

       return; 
      } 
     } 
     protected void grdAttachments_RowDeleting(object sender, GridViewDeleteEventArgs e) 
     { 
      RemoveNewARowToGrid(grdAttachments.Rows[e.RowIndex].Cells[0].Text); 
     } 




    } 
} 

回答

0

AysncFile上傳執行異步,並且工作正常。你正在做的是綁定到一個沒有被更新的網格,因爲它沒有辦法重新渲染。它不在更新面板中。你基本上將網格綁定在後臺,從完全不同的請求,因此ASYNC。

在更新面板中放置網格並在文件完成後調用更新並重新綁定網格。