在gridview中上传文件

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

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

   // shown only when not in edit mode    // shown only in edit mode   

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

   

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

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

希望这会有所帮助……

以下链接将帮助您:

http://msdn.microsoft.com/en-us/library/7tas5c80.aspx

它有一个示例代码,用于将DateTimePicker添加到datagridview单元格。 你可以用同样的方式添加fileupload控件…

希望这可以帮助…

Sudha有一篇很棒的文章,在GridView有完整的文件上传function:

gridview中的Fileupload控件?


                .... 

EditTemplate看起来像这样:

      

在后面的代码中,这将在行更新上传文件:

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

如果未选择任何文件,则会进行此检查,以便选择以前的名称。 请注意,在编辑模板中,我们放置了一个文本框,其可见性设置为false,该文本框与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; } }