在gridview中上传文件

use*_*406 4 c# asp.net gridview file-upload

我需要将一个带有文件上传控件的列添加到我的网格视图中,以便我可以针对任何特定行上传文件.是否可以这样做,理想情况下我需要能够在不将gridview置于其编辑状态的情况下执行此操作.

Har*_*run 10

您可以在以下内容中使用它:

   <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>
Run Code Online (Sandbox Code Playgroud)

最后包括如下进入编辑模式.

       <asp:commandField showEditButton="true" showCancelButton="true"> 
Run Code Online (Sandbox Code Playgroud)

然后添加两个事件,如下所示:

   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();             
    }   
Run Code Online (Sandbox Code Playgroud)

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();

    }
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助......