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)
希望这会有所帮助......