2012-11-02 49 views
1

我上傳文件使用fileupload,文件的詳細信息,如文件類型,文件的名稱和完整的路徑被存儲在一個名爲exceldetails數據庫表中現在我想要顯示上傳的文件,並通過點擊下載GridView中每個文件旁邊的鏈接按鈕。這是怎麼了上傳文件:如何在GridView中顯示上傳的文件並單擊下載鏈接按鈕下載它們?

 string[] filePaths; 
    string strFileType = System.IO.Path.GetExtension(FileUpload1.FileName).ToString().ToLower(); 
    string strFileName = FileUpload1.PostedFile.FileName.ToString(); 
    FileUpload1.SaveAs(Server.MapPath("~/Import/" + strFileName + strFileType)); 
    string strNewPath = Server.MapPath("~/Import/" + strFileName + strFileType); 
    string strNewPath1 = Server.MapPath("~/Import/" + strFileName + strFileType).ToString(); 
    fileSize = FileUpload1.PostedFile.ContentLength/1024; 

    //EXCEL DETAILS TABLE 
    con.Open(); 
    //========================================= 
    DataTable dt8 = new DataTable(); 
    SqlCommand cmd8 = new SqlCommand("insert into exceldetails (name,type,details,size,path)" + "values(@name,@type,@details,@size,@path)", con); 
    cmd8.Parameters.Add("@name", SqlDbType.VarChar).Value = strFileName; 
    cmd8.Parameters.Add("@type", SqlDbType.VarChar).Value = strFileType; 
    cmd8.Parameters.Add("@details", SqlDbType.VarChar).Value = DateTime.Now; 
    cmd8.Parameters.Add("@size", SqlDbType.Int).Value = fileSize; 
    cmd8.Parameters.Add("@path", SqlDbType.NVarChar).Value = strNewPath; 
    cmd8.ExecuteNonQuery(); 
    con.Close(); 
    try 
    { 
     SqlDataAdapter da8 = new SqlDataAdapter(cmd8); 
     da8.Fill(dt8); 
    } 
    catch { } 

我,你可以從問題本身,所以請告訴我,我需要詳細補充什麼

回答

0

您必須添加一個超鏈接判斷一個初學者在網格和導航網址欄應設置爲

"~/Import/" + strFileName + strFileType 

你是存儲在數據庫中的全部物理路徑,與此相伴,你應該在「〜/導入/」 + strFileName + strFileType存儲在數據庫並使用該列作爲數據urce爲下載鏈接列。

2

而且你的代碼很凌亂

嘗試將其更改爲類似這樣的插入:

using(SqlConnection cn = new SqlConnection("Your Conn String")) 
{ 
    cn.Open(); 
    string sqlInsert = "INSERT STATEMENT"; 
    string fileName = FileUploadControl.FileName; 
    string fileExtension = fileName.Substring(fileName.LastIndexOf("."), fileName.Length - fileName.LastIndexOf(".")); 
    string filePath = "~/Import/" + fileName + fileExtension; 
    int fileSize = FileUploadControl.PostedFile.ContentLength/1024; 

    FileUploadControl.SaveAs(Server.MapPath(filePath)); 

    using(SqlCommand cmd = new SqlCommand(sqlInsert, cn)) 
    { 
     cmd.Parameters.AddWithValue("@name", fileName); 
     cmd.Parameters.AddWithValue("@type", fileExtension); 
     cmd.Parameters.AddWithValue("@details", DateTime.Now); 
     cmd.Parameters.AddWithValue("@size", fileSize); 
     cmd.Parameters.AddWithValue("@path", filePath); 
     cmd.ExecuteNonQuery(); 
    } 
} 

這讓數據綁定

using(SqlConnection cn = new SqlConnection("Your Conn String")) 
{ 
    string sqlSelect = "SELECT STATEMENT"; 

    using(SqlDataAdapter da = new SqlDataAdapter(sqlSelect, cn)) 
    { 
     DataTable dt = new DataTable(); 
     da.Fill(dt); 

     //bind data 
    } 
} 

還應考慮使用一箇中繼器,它比網格視圖更加靈活。

+1

試着解釋一下OP爲什麼OP的代碼是混亂的。 –

0

下面是我如何做到這一點使用一個GridView模板項目例如:

<asp:TemplateField> 
    <ItemTemplate> 
     <asp:HyperLink ID="HyperLink1" 
     runat="server" 
     NavigateUrl='<%# Eval("AttachmentID", "GetAttachment.aspx?ID={0}") %>' 
     ImageUrl="~/Images/Download16.png" 
     Target="_blank" 
     Height="16px" 
     Width="16px"> 
     </asp:HyperLink> 
    </ItemTemplate> 
</asp:TemplateField> 

然而,我的附件文件被存儲在數據庫中。我有一個接受查詢字符串參數的頁面,用於標識附件,然後用它來獲取附件並讓用戶下載它。您應修改超鏈接的navigateURL屬性以鏈接到需要下載的內容。請注意'AttachmentID'是由網格的數據源選擇的字段,您可能會使用'FilePath'或類似的東西。

相關問題