Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将Gridview的选定行下载到excel_C#_Asp.net_Excel - Fatal编程技术网

C# 将Gridview的选定行下载到excel

C# 将Gridview的选定行下载到excel,c#,asp.net,excel,C#,Asp.net,Excel,我需要将asp.net gridview的选定行下载到excel工作表中。 我正在做的是一次尝试全部检查,或者只检查几个选定的行,然后在按下下面的下载按钮后,所有选定的行都将下载为excel。当我按下下载按钮时,这里的每一件事情都很好,但是所有的行都会被下载,忽略选择。 下面是我的代码 public void ExportGridToExcel(GridView grdGridView, string fileName) { Response.Clear(); Response

我需要将asp.net gridview的选定行下载到excel工作表中。 我正在做的是一次尝试全部检查,或者只检查几个选定的行,然后在按下下面的下载按钮后,所有选定的行都将下载为excel。当我按下下载按钮时,这里的每一件事情都很好,但是所有的行都会被下载,忽略选择。 下面是我的代码

public void ExportGridToExcel(GridView grdGridView, string fileName)
{
    Response.Clear();

    Response.AddHeader("content-disposition", string.Format("attachment;filename={0}.xls", fileName));
    Response.Charset = "";

    Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);

    Response.ContentType = "application/vnd.xls";

    StringWriter stringWriter = new StringWriter();
    HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);

// I Tried using following (but with no success)
//-----Trial Starts----------------
//foreach (GridViewRow gvr in gvProgramList.Rows)
//    {
//        CheckBox cbox = (CheckBox)gvr.FindControl("cboxSelect");
//        if(cbox.Checked)
//            gvr.Visible = true;
//        else
//            gvr.Visible = false;
//    }
//--------Trial ends---------------
    grdGridView.DataBind();
    ClearControls(grdGridView);

    // Throws exception: Control 'ComputerGrid' of type 'GridView'
    // must be placed inside a form tag with runat=server.
    // ComputerGrid.RenderControl(htmlWrite);

    // Alternate to ComputerGrid.RenderControl above
    System.Web.UI.HtmlControls.HtmlForm form = new System.Web.UI.HtmlControls.HtmlForm();
    Controls.Add(form);



    form.Controls.Add(grdGridView);
    form.RenderControl(htmlWriter);
    Response.Write(stringWriter.ToString());
    Response.End();
    foreach (GridViewRow gvr in gvProgramList.Rows)
    {
        CheckBox cbox = (CheckBox)gvr.FindControl("cboxSelect");
            gvr.Visible = true;
    }
    grdGridView.DataBind();
}

private void ClearControls(Control control)
{
    for (int i = control.Controls.Count - 1; i >= 0; i--)
    {
        ClearControls(control.Controls[i]);
    }

    if (!(control is TableCell))
    {
        if (control.GetType().GetProperty("SelectedItem") != null)
        {
            LiteralControl literal = new LiteralControl();
            control.Parent.Controls.Add(literal);
            try
            {
                literal.Text =
                    (string)control.GetType().GetProperty("SelectedItem").
                        GetValue(control, null);
            }
            catch
            { }
            control.Parent.Controls.Remove(control);
        }
        else if (control.GetType().GetProperty("Text") != null)
        {
            LiteralControl literal = new LiteralControl();
            control.Parent.Controls.Add(literal);
            literal.Text =
                (string)control.GetType().GetProperty("Text").
                    GetValue(control, null);
            control.Parent.Controls.Remove(control);
        }
    }
    return;
}

protected void btnDownload_Click(object sender, EventArgs e)
{
    if (gvProgramList.Rows.Count > 0)
    {
        ExportGridToExcel(gvProgramList, "ProgramList");
    }
}

我可以向您推荐这样做的逻辑:

1.使用gridview的选定行创建动态数据表。 它只是在gridview行中循环,获取选定行并将其附加到新的datatable中

2.然后编写代码,将此新数据表转换为excel,并为google将数据表转换为excel的结果列表

Try like the below code,hope it helps you..
在下载按钮单击事件上,调用此fn

private void ExportToExcell()
{       
        DataTable dt = new DataTable();
        dt.Columns.Add("Plan ID");
        dt.Columns.Add("Plan Name");
        dt.Columns.Add("Balance");
        foreach (GridViewRow row in gdvBal.Rows)
        {
            CheckBox chkCalls = (CheckBox)row.FindControl("chkCalls");
            if (chkCalls.Checked == true)
            {
                int i = row.RowIndex;
                Label lblPlanId = (Label)gdvBal.Rows[i].FindControl("lblPlanId");
                Label lblPlanName = (Label)gdvBal.Rows[i].FindControl("lblPlanName");
                Label lblBalance = (Label)gdvBal.Rows[i].FindControl("lblBalance");

                DataRow dr = dt.NewRow();
                dr["Plan ID"] = Convert.ToString(lblPlanId.Text);
                dr["Plan Name"] = Convert.ToString(lblPlanName.Text);
                dr["Balance"] = Convert.ToString(lblBalance.Text);
                dt.Rows.Add(dr);
            }
        }
        GridView gdvExportxls = new GridView();
        gdvExportxls.DataSource = dt;
        gdvExportxls.DataBind();
        Response.Clear();
        Response.Buffer = true;
        Response.ContentType = "application/ms-excel";
        Response.AddHeader("content-disposition", string.Format("attachment;filename=BillingForfBalances.xls", "selectedrows"));
        Response.Charset = "";
        StringWriter stringwriter = new StringWriter();
        HtmlTextWriter htmlwriter = new HtmlTextWriter(stringwriter);
        gdvExportxls.RenderControl(htmlwriter);
        Response.Write(stringwriter.ToString().Replace("<div>", " ").Replace("</div>", " "));
        Response.End();

}