2011-05-12 61 views
4

我需要添加一個帶有文件上傳控件的列到我的網格視圖,以便我可以上傳任何特定行的文件。有沒有可能做到這一點,理想情況下,我需要能夠做到這一點,而不需要將gridview置於編輯狀態。gridview中的文件上傳

回答

9

可以按如下方式中的使用:

<asp:TemplateField HeaderText="UploadImage"> 

    <ItemTemplate> 

     <asp:Image ImageUrl="~/images/1.jpg" runat="server" ID="image" /> // shown only when not in edit mode 

    </ItemTemplate> 

    <EditItemTemplate> 

     <asp:FileUpload ID="FileUpload1" runat="server" /> // shown only in edit mode 

    </EditItemTemplate> 

    </asp:TemplateField> 

最後包含一個如下進入編輯模式。

 <asp:commandField showEditButton="true" showCancelButton="true"> 

然後添加兩個事件如下:

protected void GridView1_RowEditing(object sender, GridViewUpdateEventArgs e) 
    { 
     gvwID.EditIndex=e.NewEditIndex; 
     BindGrid(); 
    } 

    protected void GridView1_RowCancelEdit(object sender, GridViewUpdateEventArgs e) 
    { 
      gvwID.EditIndex=-1; 
      BindGrid();    
    } 

FileUpload控件,不會自動保存上傳的文件。要保存文件,您需要使用FileUpload控件的SaveAs方法。在使用SaveAs方法之前,您需要爲正在編輯的行獲取FileUpload控件的實例。要獲得控件的實例,可以連接到GridView的RowUpdating事件。下面的代碼將得到FileUpload控件的實例,並保存上傳的文件:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 

     int RowID=Convert.ToInt32(gvwID.DataKeys[e.RowIndex].value); 

     FileUpload fileUpload = GridView1.Rows[e.RowIndex].FindControl("FileUpload1") as FileUpload; 

    if(fileUpload.HasFile) 
    { 

     fileUpload.SaveAs(System.IO.Path.Combine(Server.MapPath("Images"), fileUpload.FileName)); 

     //update db using the name of the file corresponding to RowID 
     } 

     gvwID.EditIndex=-1; 
     BindGrid(); 

    } 

希望這將有助於...

0

蘇哈有很大的後文件上傳的全部功能,在GridView

Fileupload control in gridview?


<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" 
DataSourceID="AccessDataSource1" Width="148px" OnRowCommand="GridView1_RowCommand"> 
<Columns> 
<asp:BoundField DataField="ID" HeaderText="ID" ReadOnly="True" SortExpression="ID" /> 
<asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" /> 
<asp:TemplateField> 
<ItemTemplate> 
<asp:Label ID="lblFileUpLoad" runat="server"></asp:Label> 
</ItemTemplate> 
<EditItemTemplate> 
<asp:FileUpload ID="FileUpload1" runat="server" /> 
</EditItemTemplate> 
</asp:TemplateField> 
<asp:CommandField ShowEditButton="true" ShowDeleteButton="true" /> 
</Columns> 
</asp:GridView> 
.... 
0

的EditTemplate看起來是這樣的:

<EditItemTemplate> 

     <asp:TextBox ID="txtImage" runat="server" Text='<%# Bind("Image") %>' Visible="False"></asp:TextBox> 
     <asp:FileUpload ID="FileUpload1" runat="server" /> 

    </EditItemTemplate> 

在代碼在這之後將上傳行更新上的文件:

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
{ 
    GridViewRow row = GridView1.Rows[e.RowIndex] as GridViewRow; 
    FileUpload FileUpload1 = (FileUpload)GridView1.Rows[e.RowIndex].FindControl("FileUpload1"); 

    if (FileUpload1 != null && FileUpload1.HasFile) 
    { 
     FileUpload1.SaveAs(Server.MapPath("~/uploads/" + myfilename)); 
    } 
} 

此檢查是在到位的情況下沒有f ile被選中以便選擇以前的名字。注意,在編輯模板,我們已經把已可見性設置爲假的文本框結合的圖像名稱在DB

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    if (GridView1.EditIndex == -1) return; 
    FileUpload fileUpLoad = GridView1.Rows[GridView1.EditIndex].FindControl("FileUpload1") as FileUpload; 
    string fileName = fileUpLoad.FileName; 
    TextBox txtImage = GridView1.Rows[GridView1.EditIndex].FindControl("txtImage") as TextBox; 

    if (fileUpLoad != null && fileUpLoad.HasFile) 
    { 
     txtImage.Text = fileUpLoad.FileName; 
    } 
    else 
    { 
     txtImage.Text = txtImage.Text; 
    } 

} 
0
<asp:ScriptManager runat="server" ID="scm"></asp:ScriptManager> 

<asp:UpdatePanel runat="server" ID="upMain" UpdateMode="Conditional"> 
<ContentTemplate> 

    <asp:GridView AutoGenerateColumns="False" runat="server" ID="dt"> 
<Columns>  
<asp:TemplateField HeaderText="Catagory">   
<ItemTemplate>    
<asp:DropDownList runat="server" ID="ddlSubCat">    
</asp:DropDownList>   
</ItemTemplate>  
</asp:TemplateField>  

<asp:TemplateField HeaderText="Attachments">   
<ItemTemplate>   

<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="updFU">     <ContentTemplate>  
<asp:FileUpload runat="server" ID="updCon" /><asp:Button runat="server" ID="btnUpload" Text="Upload" />    
</ContentTemplate>    
<Triggers>    
<asp:PostBackTrigger ControlID="btnUpload" />    
</Triggers>  
</asp:UpdatePanel> 

</ItemTemplate>  
</asp:TemplateField> 
</Columns> 
</asp:GridView> 

</ContentTemplate> 
</asp:UpdatePanel>