2013-06-25 42 views
0

我想要做的是,我使用asp.net上傳程序控件獲取文件名/路徑,然後將其路徑保存爲網格視圖。例如在ASP.NET中使用GridView多文件上傳

String path = String.Empty; 
path = FileUploader.FileName; 

然後將該路徑保存在網​​格視圖列中。

savefiletoGrid(path); 

上傳所有需要的文件後,我將這些文件保存在服務器上。像這樣

while(// condition) 
{ 
      string tempfilename = ""; // file name/path from gridview 
      string path2 = Server.MapPath("Dir\\" + tempfilename); 
      FileUploader.SaveAs(path2); 
} 

但是,問題是該文件正在保存在服務器上正確的名稱,但大小爲0字節。 請讓我知道如何解決這個問題?

其實我想要的東西像客戶端上傳在asp.net中,我會上傳多個文件並在gridview(或其他)中顯示它們,以便用戶可以看到要選擇的文件,並且可以從列出的文件中刪除。

只有當用戶點擊其他按鈕時,纔會將文件保存到服務器,並說'更新'。你能幫助我,如何做到這一點?

回答

0

問題已經解決通過用控制一列例如創建數據表(與列數據類型文件上傳):

private DataTable CreateDtDocs(string name, string path, FileUpload FileUploader) 
    { 
     DataTable dt1 = new DataTable(); 
     dt1.Columns.Add("SR_NO"); 
     dt1.Columns.Add("Name"); 
     dt1.Columns.Add("Path"); 

     Type col_type = fubrowse.GetType(); 
     DataColumn dt_col = new DataColumn("Control", col_type); 

     dt1.Columns.Add(dt_col); 

     DataRow dr = dt1.NewRow(); 
     dr["SR_NO"] = "1"; 
     dr["NAME"] = name; 
     dr["Path"] = path; 
     dr["Control"] = FileUploader; 
     dt1.Rows.Add(dr); 
     return dt1; 
    } 

然後填充表象下面這樣:

private DataTable AddDtDocs(string name, string path, FileUpload FileUploader) 
    { 
     DataTable dt1 = (DataTable)Session["AttachFilesdt"]; 
     int count = dt1.Rows.Count; 

     DataRow dr = dt1.NewRow(); 
     dr["SR_NO"] = count + 1; 
     dr["NAME"] = name; 
     dr["Path"] = path; 
     dr["Control"] = FileUploader; 
     dt1.Rows.Add(dr); 
     return dt1; 
    } 

然後我在Dictionary中添加路徑名和控件,並將它們傳遞給不同的函數以將它們保存在服務器上。

Dictionary<string, FileUpload> DocsPathAndControl = new Dictionary<string, FileUpload>(); 
if (Session["AttachFilesdt"] != null) 
     { 
      tempdt = (DataTable)Session["AttachFilesdt"]; 
      for (int i = 0; i < tempdt.Rows.Count; i++) 
      { 
       DocsPathAndControl.Add(tempdt.Rows[i]["Path"].ToString(), (FileUpload)tempdt.Rows[i]["Control"]); 
      } 
      Session["AttachFilesdt"] = null; 
     } 

功能保存文件

private void AddDocuments(int jurisdictionID, Dictionary<string,FileUpload> docPathsAndControl) 
    { 
     foreach (var item in docPathsAndControl) 
     { 
      string tempfilename = jurisdictionID + "_" + item.Key.ToString(); 
      string path = Server.MapPath("Dir\\" + tempfilename); 
      FileUpload FileUploaderControl = (FileUpload)item.Value; 
      FileUploaderControl.PostedFile.SaveAs(path); 

      } 
    } 

希望,它會幫。

3

您必須捕獲GridView中RowCommand事件中生成的事件,併爲上傳按鈕設置一個CommandName屬性。

以下是詳細的代碼,通過它你可以做到這一點:

<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand"> 
<Columns> 
      <asp:TemplateField> 
       <ItemTemplate> 
        <asp:FileUpload ID="FileUpload1" runat="server" /> 
        <asp:Button ID="Button1" runat="server" Text="Upload" CommandName="Upload"/> 
       </ItemTemplate>      
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

而且在你後面的代碼:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (e.CommandName == "Upload") 
    { 
     FileUpload FileUp = (FileUpload)e.Item.FindControl("FileUpload1"); 
     string UploadedFileName = FileUp.FileName; 
     string Path = Server.MapPath("Documents"); 
     FileUpload.SaveAs(Path + "\\" + UploadedFileName); 
    } 
} 

希望它能幫助。

+0

其實我想要的東西像在asp.net客戶端上傳,我會上傳多個文件,並顯示在網格視圖(或在其他東西),使用戶可以看到文件被選中,並可以從列出的文件中刪除。 只有當用戶點擊其他按鈕時,纔會將文件保存到服務器,並說'更新'。你能幫助我,如何做到這一點? –

2

要完成此功能,您必須讓用戶上傳文件。您必須暫時保存以顯示它們。 然後,當用戶點擊「更新」按鈕時,您將把臨時文件傳輸到永久存儲器。

您是否將FileUploaders保存在GridView中?

+0

不,我沒有在GridView中放置FileUploader。 –

+0

我在這裏找到解決方案。 http://aspalliance.com/1221_CodeSnip_Uploading_Multiple_Files_At_Once.all但這裏使用listbox .... –