上传Gridview中的文件,并在完成后显示在同一行中

时间:2016-04-20 03:02:37

标签: c# asp.net gridview

我正在尝试使用Asp.net将Gridview upload中的文件存储到文件夹中。

这是我的标记代码,用于生成上传列和按钮以及文件上传控件。

  <asp:TemplateField HeaderText="Upload">
        <ItemTemplate>
            <asp:FileUpload ID="FileUpload1" runat="server" EnableViewState="true" AllowMultiple="true" />
            <asp:Button ID="btnUpload" runat="server" CommandName="Upload"  Text="OK" style=" color: #ff0000" OnClick="btnUpload_Click"/> 
        </ItemTemplate>
        </asp:TemplateField>  

我有我的代码隐藏处理 btnUpload_Click ,如下所示:

 protected void btnUpload_Click(object sender, GridViewCommandEventArgs e)
{
    Response.Write("File has been passed");
    Button bts = e.CommandSource as Button;
    Response.Write(bts.Parent.Parent.GetType().ToString());
    if (e.CommandName.ToLower() != "upload")
    {
        return;
    }
    FileUpload fu = bts.FindControl("FileUpload4") as FileUpload;//here
    if (fu.HasFile)
    {
        bool upload = true;
        string fleUpload = Path.GetExtension(fu.FileName.ToString());
        if (fleUpload.Trim().ToLower() == ".xls" | fleUpload.Trim().ToLower() == ".xlsx")
        {
            fu.SaveAs(Server.MapPath("~/UpLoadPath/" + fu.FileName.ToString()));
            string uploadedFile = (Server.MapPath("~/UpLoadPath/" + fu.FileName.ToString()));
            //Someting to do?...
        }
        else
        {
            upload = false;
            // Something to do?...
        }
        if (upload)
        {
            // somthing to do?...
        }
    }
    else
    {
        //Something to do?...
    }
} 

我收到此错误:

  

CS0123:'btnUpload_Click'没有超载匹配委托   “System.EventHandl

有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:5)

您已使用按钮绑定CommandClick事件。你的按钮代码应该是这样的 -

  <asp:TemplateField HeaderText="Upload">
        <ItemTemplate>
            <asp:FileUpload ID="FileUpload1" runat="server" EnableViewState="true" AllowMultiple="true" />
            <asp:Button ID="btnUpload" runat="server" CommandName="Upload"  Text="OK" style=" color: #ff0000"/> 
        </ItemTemplate>
        </asp:TemplateField>

从代码后面捕获命令而不是事件。像 -

 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    Response.Write("File has been passed");
    Button bts = e.CommandSource as Button;
    Response.Write(bts.Parent.Parent.GetType().ToString());
    if (e.CommandName.ToLower() != "upload")
    {
        return;
    }
    FileUpload fu = bts.FindControl("FileUpload1") as FileUpload;//here
    if (fu.HasFile)
    {
        bool upload = true;
        string fileName = Path.GetFileName(fu.PostedFile.FileName);
        string fleUpload = Path.GetExtension(fu.PostedFile.FileName);
        if (fleUpload.Trim().ToLower() == ".xls" || fleUpload.Trim().ToLower() == ".xlsx")
        {
            fu.SaveAs(Server.MapPath("~/UpLoadPath/" + fileName));
            string uploadedFile = (Server.MapPath("~/UpLoadPath/" + fileName ));
            //Someting to do?...
        }
        else
        {
            upload = false;
            // Something to do?...
        }
        if (upload)
        {
            // somthing to do?...
        }
    }
    else
    {
        //Something to do?...
    }
} 

以上我假设您的gridview IDGridView1。另一个文件上传器控件的ID与您的代码背后不匹配。这应该有用。