使用ASP.NET中的Gridview进行多文件上载

时间:2013-06-25 09:52:41

标签: c# asp.net .net webforms

我想要做的是,我正在使用asp.net上传器控件获取文件名/路径,然后将其路径保存为网格视图。 e.g

String path = String.Empty;  
path = FileUploader.FileName;

然后在网格视图列中保存此路径。

savefiletoGrid(path);

上传所有必需的文件后,我将这些文件保存在服务器上。像这样

while( // condition )
{
            string tempfilename = "";  // file name/path from gridview
            string path2 = Server.MapPath("Dir\\" + tempfilename);
            FileUploader.SaveAs(path2);
}

但问题是文件正在服务器上保存,名称正确,但大小为0字节。 请告诉我如何解决这个问题?

其实我想要在asp.net中上传客户端,我会上传多个文件并在gridview(或其他内容)中显示它们,以便用户可以看到要选择的文件并可以从列出的文件中删除。

仅当用户点击其他按钮说“更新”时,才会将文件保存到服务器。你能帮助我,怎么做到这一点?

3 个答案:

答案 0 :(得分:3)

您必须在其RowCommand事件中捕获GridView中生成的事件,并为上传按钮设置C​​ommandName属性。

以下是您可以通过其完成此操作的详细代码:

 <asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand">
 <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:FileUpload ID="FileUpload1" runat="server" />
                    <asp:Button ID="Button1" runat="server" Text="Upload" CommandName="Upload"/>
                </ItemTemplate>                    
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

在你的代码背后:

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Upload")
    {
        FileUpload FileUp = (FileUpload)e.Item.FindControl("FileUpload1");
        string UploadedFileName = FileUp.FileName;
        string Path = Server.MapPath("Documents");
        FileUpload.SaveAs(Path + "\\" + UploadedFileName);
    }
}

希望它有所帮助。

答案 1 :(得分:2)

要完成此功能,您必须让用户上传文件。您必须暂时保存它们才能显示它们。 然后,当用户单击“更新”按钮时,您将临时文件传输到永久存储器。

您是否将FileUploader保存在GridView中?

答案 2 :(得分:0)

通过创建一个带有一列控件的DataTable(列数据类型为FileUpload)解决了问题,例如:

private DataTable CreateDtDocs(string name, string path, FileUpload FileUploader)
    {
        DataTable dt1 = new DataTable();
        dt1.Columns.Add("SR_NO");
        dt1.Columns.Add("Name");
        dt1.Columns.Add("Path");

        Type col_type = fubrowse.GetType();
        DataColumn dt_col = new DataColumn("Control", col_type);

        dt1.Columns.Add(dt_col);

        DataRow dr = dt1.NewRow();
        dr["SR_NO"] = "1";
        dr["NAME"] = name;
        dr["Path"] = path;
        dr["Control"] = FileUploader;
        dt1.Rows.Add(dr);
        return dt1;
    }

然后填充如下表:

 private DataTable AddDtDocs(string name, string path, FileUpload FileUploader)
    {
        DataTable dt1 = (DataTable)Session["AttachFilesdt"];
        int count = dt1.Rows.Count;

        DataRow dr = dt1.NewRow();
        dr["SR_NO"] = count + 1;
        dr["NAME"] = name;
        dr["Path"] = path;
        dr["Control"] = FileUploader;
        dt1.Rows.Add(dr);
        return dt1;
    }

然后我在Dictionary中添加路径名和控件,并将它们传递给另一个函数以将它们保存在服务器上。

Dictionary<string, FileUpload> DocsPathAndControl = new Dictionary<string, FileUpload>();
if (Session["AttachFilesdt"] != null)
        {
            tempdt = (DataTable)Session["AttachFilesdt"];
            for (int i = 0; i < tempdt.Rows.Count; i++)
            {
                DocsPathAndControl.Add(tempdt.Rows[i]["Path"].ToString(), (FileUpload)tempdt.Rows[i]["Control"]);
            }
            Session["AttachFilesdt"] = null;
        }

保存文件的功能

  private void AddDocuments(int jurisdictionID, Dictionary<string,FileUpload> docPathsAndControl)
    {
         foreach (var item in docPathsAndControl)
         {
             string tempfilename = jurisdictionID + "_" + item.Key.ToString();
             string path = Server.MapPath("Dir\\" + tempfilename);
             FileUpload FileUploaderControl = (FileUpload)item.Value;
             FileUploaderControl.PostedFile.SaveAs(path);

          }
    }

希望,它会帮助。