lll1234 Ответов: 7

Как экспортировать таблицы в Excel ?


Response.Write("Export to excel");
        Response.Clear();
        Response.Charset = "";
        
        Response.ContentType = "application/vnd.ms-excel";
        Response.AddHeader("content-disposition", "attachment;filename=Demo.xls");
        Response.Charset = "";
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        StringWriter stringwriter = new StringWriter();
        HtmlTextWriter htmwrite = new HtmlTextWriter(stringwriter);
        GridView1.RenderControl(htmwrite);
        Response.Write(stringwriter.ToString());
        Response.End();

This  is my code to export gridview to excel. but an error is shown as
Control 'GridView1' of type 'GridView' must be placed inside a form tag with runat=server.
Pls help me to correct this

Al Moje

Привет,
Я думаю, что ошибка не в вашем коде, потому что это четкое сообщение об ошибке
'Элемент управления' GridView1 'типа ' GridView' должен быть помещен внутри тега формы с runat=server'. Советую вам просмотреть ваш "клиентский код". Или вы можете опубликовать свой клиентский код, чтобы другие могли вам помочь...

Satish Acharya

Эта ошибка также сохраняется и в моем коде.Я думаю, это потому, что на странице есть несколько атрибутов сервера runat.Удалить его

7 Ответов

Рейтинг:
2

Dalek Dave

Хорошие ссылки.

Рейтинг:
1

uspatel

проверьте свой дизайн-код,
поместите gridview1 внутри тега формы или ContentPlaceholder с runat= " Server"
Вы можете использовать другой инструмент для экспорта gridview в Excel с тем же форматом
экспорт в Excel


Рейтинг:
1

shek124

Добавьте эти коды на свою страницу aspx

public override void RenderControl(HtmlTextWriter writer)
   {
       base.RenderControl(writer);
   }
   protected override void RenderChildren(HtmlTextWriter writer)
   {
       base.RenderChildren(writer);
   }
   public override void VerifyRenderingInServerForm(Control control)
   {
       //base.VerifyRenderingInServerForm(control);
   }


С уважением
Шейх


Рейтинг:
0
Рейтинг:
0
Рейтинг:
0

Yogesh Pednekar

Сначала перетащите элемент управления gridview на страницу aspx

затем добавьте управление кнопкой

<asp:Button onclick="Button1_Click" text="Export to Excel" runat="server" id="Button1"/>


и на странице .cs вставьте этот код


protected void Button1_Click(object sender, EventArgs e)
    {
   
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.AddHeader("content-disposition", string.Format("attachment;filename={0}.xls", "Exported"));
        HttpContext.Current.Response.Charset = "";
        HttpContext.Current.Response.ContentType = "application/ms-excel";

        using (StringWriter sw = new StringWriter())
        {
            using (HtmlTextWriter htw = new HtmlTextWriter(sw))
            {
                //  Create a table to contain the grid
                 Table table = new Table();

                foreach (GridViewRow row in gvBankReco.Rows)
                {
                    VerifyRenderingInServerForm(row);
                    table.Rows.Add(row);
                   
                }
                
                //  render the table into the htmlwriter
                table.RenderControl(htw);

                //  render the htmlwriter into the response
                HttpContext.Current.Response.Write(sw.ToString());
                HttpContext.Current.Response.End();
            }
        }
    }
    public override void VerifyRenderingInServerForm(Control control)
    {
        for (int i = 0; i < control.Controls.Count; i++)
        {
        Control current = control.Controls[i];
        if (current is LinkButton)
        {
        control.Controls.Remove(current);
        control.Controls.AddAt(i, new LiteralControl((current as
        LinkButton).Text));
        }
        else if (current is ImageButton)
        {
        control.Controls.Remove(current);
        control.Controls.AddAt(i, new LiteralControl((current as
        ImageButton).AlternateText));
        }
        else if (current is HyperLink)
        {
        control.Controls.Remove(current);
        control.Controls.AddAt(i, new LiteralControl((current as
        HyperLink).Text));
        }
        else if (current is DropDownList)
        {
        control.Controls.Remove(current);
        control.Controls.AddAt(i, new LiteralControl((current as
        DropDownList).SelectedItem.Text));
        }
        else if (current is CheckBox)
        {
        control.Controls.Remove(current);
        control.Controls.AddAt(i, new LiteralControl((current as
        CheckBox).Checked ? "כן" : "לא"));
        }
        if (current.HasControls())
        {
           VerifyRenderingInServerForm(current);
        }
        }
        // Confirms that an HtmlForm control is rendered for the
        //specified ASP.NET server control at run time.
    }


Я надеюсь, что, сделав это, ваша проблема будет решена.


Рейтинг:
0

kaushik ahir

Ниже код на странице aspx

  <asp:Button ID="lnkbtnExport" runat="server" Text="Export Report To Excel" style="background-color: #39424c; border-color: #000; color: #ffffff;  border-radius: 15px; height: 28px;
width: 180px;"></asp:Button>


<div style="display:none;">
    	    <asp:GridView ID="GridView1" HeaderStyle-BackColor="White" HeaderStyle-ForeColor="Black" HeaderStyle-CssClass="fa-border" 

        RowStyle-BackColor="Gray" AlternatingRowStyle-BackColor="White" AlternatingRowStyle-ForeColor="#000"

        runat="server" AutoGenerateColumns="false" AllowPaging="true" OnPageIndexChanging="OnPageIndexChanging">
        <Columns>
            <asp:BoundField DataField="Cdate" HeaderText="Create Date" ItemStyle-Width="100px" DataFormatString="{0:dd/MM/yyyy hh:mm tt}" />
            <asp:BoundField DataField="Name" HeaderText="Contact Name" ItemStyle-Width="150px" />
            <asp:BoundField DataField="Mobile" HeaderText="Mobile" ItemStyle-Width="100px" />
            <asp:BoundField DataField="City" HeaderText="City" ItemStyle-Width="100px" />
            <asp:BoundField DataField="Company" HeaderText="Company" ItemStyle-Width="100px" />
            <asp:BoundField DataField="Email" HeaderText="Email Address" ItemStyle-Width="100px" />
            <asp:BoundField DataField="DeviceType" HeaderText="Device Type" ItemStyle-Width="100px" />
            <asp:BoundField DataField="IpAddress" HeaderText="Ip Address" ItemStyle-Width="100px" />
            <asp:BoundField DataField="Mac" HeaderText="Mac Address" ItemStyle-Width="100px" />
        </Columns>
    </asp:GridView>
        </div>


ниже приведен код на странице aspx. cs

protected void lnkbtnExport_Click(object sender, EventArgs e)
{
	Response.Clear();
	Response.Buffer = true;
	Response.AddHeader("content-disposition", "attachment;filename=ClientList.xls");
	Response.Charset = "";
	Response.ContentType = "application/vnd.ms-excel";
	using (StringWriter sw = new StringWriter()) {
		HtmlTextWriter hw = new HtmlTextWriter(sw);

		//To Export all pages
		GridView1.AllowPaging = false;
		this.BindGrid();


		if (GridView1.Rows.Count > 0) {
			GridView1.HeaderRow.BackColor = Color.White;
			foreach (TableCell cell in GridView1.HeaderRow.Cells) {
				cell.BackColor = GridView1.HeaderStyle.BackColor;
			}
			foreach (GridViewRow row in GridView1.Rows) {
				row.BackColor = Color.White;
				foreach (TableCell cell in row.Cells) {
					if (row.RowIndex % 2 == 0) {
						//cell.BackColor = GridView1.AlternatingRowStyle.BackColor
					} else {
						//cell.BackColor = GridView1.RowStyle.BackColor
					}
					cell.CssClass = "textmode";
				}
			}

			GridView1.RenderControl(hw);
			//style to format numbers to string
			string style = "<style> .textmode { mso-number-format:\\@; } </style>";
			Response.Write(style);
		}

		Response.Output.Write(sw.ToString());
		Response.Flush();
		Response.End();


	}
}