上传文件时需要来自 Gridview 的当前文件下载选项

Need current file download option from the Gridview when file is uploaded

我有一个 gridview,我可以在其中上传文件并将其保存到服务器。它还有一些额外的东西,比如如果上传了错误的文件,我们可以再次上传相同的文件,并且它的 更新版本会反映在 gridview 上。这是我的代码:-

protected void btnSubmit_Click(object sender, EventArgs e)
    {
        try
        {
            SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultCSRConnection"].ConnectionString);
            using (SqlCommand cmd = conn.CreateCommand())
            {
                if (fupreportfile.HasFiles)
                {
                    int count = CheckFileExists(fupreportfile.PostedFile.FileName);
                    fupreportfile.SaveAs(Server.MapPath("~/ReportFolder/" + fupreportfile.PostedFile.FileName));

                    if (count > 0)
                    {
                        cmd.CommandText = " Update tbl_reports SET revision=@revision Where Id=@Id";
                        cmd.Parameters.AddWithValue("@Id", GetIdByFileName(fupreportfile.PostedFile.FileName));
                        cmd.Parameters.Add("@revision", SqlDbType.VarChar).Value = (count + 1).ToString();
                        cmd.Connection = conn;
                        conn.Open();
                        cmd.ExecuteNonQuery();
                        conn.Close();
                        ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", "alert('Reports updated sucessfully');window.location ='csrreports.aspx';", true);
                    }
                    else
                    {
                        conn.Open();
                        SqlCommand cmd1 = new SqlCommand("Insert into tbl_reports (NgoId,report_type_id,report_title,report_file,report_desc,revision) values(@NgoId, @report_type_id, @report_title,@report_file,@report_desc,@revision)", conn);
                        cmd1.Parameters.Add("@NgoId", SqlDbType.Int).Value = ddlNgoName.SelectedValue;
                        cmd1.Parameters.Add("@report_type_id", SqlDbType.Int).Value = ddlReportType.SelectedValue;
                        cmd1.Parameters.Add("@report_title", SqlDbType.NVarChar).Value = txtreporttitle.Text;
                        cmd1.Parameters.Add("@report_file", SqlDbType.VarChar).Value = fupreportfile.PostedFile.FileName;
                        cmd1.Parameters.Add("@report_desc", SqlDbType.NVarChar).Value = txtreportdescription.Text;
                        cmd1.Parameters.Add("@revision", SqlDbType.VarChar).Value = (count + 1).ToString();
                        cmd1.ExecuteNonQuery();
                        conn.Close();
                        ScriptManager.RegisterStartupScript(this, this.GetType(), "alert", "alert('Reports added sucessfully');window.location ='csrreports.aspx';", true);
                    }
                }
            }
        }
        catch (Exception ex)
        {   
            throw ex;
        }
    }

用于检查是否存在相同文件

public int CheckFileExists(string fileName)
    {
        try
        {
            using (SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DefaultCSRConnection"].ConnectionString))
            {
                SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM tbl_reports WHERE report_file=@report_file", con);
                cmd.Parameters.Add("@report_file", SqlDbType.VarChar).Value = fileName;
                con.Open();
                int count = (int)cmd.ExecuteScalar();
                return count;
            }
        }
        catch (Exception ex)
        {   
            throw ex;
        }
    }

现在我想要的是,

如果我想从gridview下载当前文件,在这种情况下该怎么办

求推荐。

更新的 GRIDVIEW 代码:-

<asp:GridView ID="grdReports"
                runat="server"
                Width="100%" border="1"
                Style="border: 1px solid #E5E5E5;"
                CellPadding="3"
                OnPreRender="PreRenderGrid"
                AutoGenerateColumns="False"
                AllowPaging="true"
                CssClass="hoverTable"
                DataKeyNames="Id"
                EmptyDataText="No Records Found!"
                HeaderStyle-CssClass="k-grid td"
                OnRowCommand="grdReports_RowCommand"
                OnDataBound="grdReports_DataBound"
                PageSize="10"
                ShowFooter="false"
                OnPageIndexChanging="grdReports_PageIndexChanging"
                OnRowDeleting="grdReports_RowDeleting">
                <AlternatingRowStyle CssClass="k-alt" />
                <Columns>
                    <asp:TemplateField HeaderText="Select" ItemStyle-Width="5">
                        <ItemTemplate>
                            <asp:CheckBox ID="chkDelete" runat="server" onClick="Check_Click(this)" />
                        </ItemTemplate>
                    </asp:TemplateField>
                    <%--<asp:BoundField DataField="title" HeaderText="Report Type" ItemStyle-Width="30" />--%>
                    <asp:BoundField DataField="report_title" HeaderText="Report Title" ItemStyle-Width="30" />
                    <asp:BoundField DataField="report_file" HeaderText="Report File" ItemStyle-Width="30" />
                    <asp:BoundField DataField="report_desc" HeaderText="Report Description" HtmlEncode="false" ItemStyle-Width="30" />
                    <asp:BoundField DataField="revision" HeaderText="Report Revision" ItemStyle-Width="30" />
                    <asp:TemplateField HeaderText="Action" HeaderStyle-Width="5%" HeaderStyle-CssClass="k-grid td">
                        <ItemTemplate>
                            <asp:ImageButton ID="btnEdit" AlternateText="Edit" ImageUrl="~/images/edit.png" runat="server" Width="15" Height="15" CommandName="eEdit" CommandArgument='<%# Eval("Id") %>' CausesValidation="false" />
                            <asp:ImageButton ID="btnDelete" AlternateText="Delete" ImageUrl="~/images/delete.png" runat="server" Width="15" Height="15" CommandName="Delete" CommandArgument='<%# Eval("Id") %>' CausesValidation="false" OnClientClick="return confirm('Are you sure you want to delete this record?')" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns></asp:GridView>

按照此处的步骤操作

  1. 在末尾添加TemplateField如下。
    <asp:TemplateField>
    <ItemTemplate>
     <asp:LinkButton ID="lnkDownload" Text="Download" CommandArgument='<%# Eval("report_file") %>' runat="server" OnClick="DownloadFile"></asp:LinkButton>
      </ItemTemplate>
    </asp:TemplateField>

2) C#代码:-

protected void DownloadFile(object sender, EventArgs e)
    {
        try
        {
            string filePath = (sender as LinkButton).CommandArgument;
            System.Net.WebClient req = new System.Net.WebClient();
            HttpResponse response = HttpContext.Current.Response;
            response.Clear();
            response.ClearContent();
            response.ClearHeaders();
            response.Buffer = true;
            response.AddHeader("Content-Disposition", "attachment;filename=\"" + Server.MapPath("~/ReportFolder/" + filePath) + "\"");
            byte[] data = req.DownloadData(Server.MapPath("~/ReportFolder/" + filePath));
            response.BinaryWrite(data);
            response.End();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }