Hey SamMyat,
Please put your button outside to table, And use runat equal to server and assign id to table after thar render your table.
Please refer below sample.
HTML
<asp:Button ID="excelImgBtn" runat="server" class="green" Text="Excel" OnClick="ButtonExcel_Click"
UseSubmitBehavior="false" />
<table runat="server" id="tbl">
<tr>
<td>
<asp:Label ID="LicenseNameLbl" runat="server">123</asp:Label>
</td>
</tr>
<tr>
<td>
<asp:Label ID="TitleLabel" runat="server" CssClass="Graytitle" Text="Student Info -"></asp:Label>
<asp:Label ID="TitleLbl" runat="server" CssClass="Graytitle">Test</asp:Label>
</td>
</tr>
<tr>
<td>
<asp:Label ID="StudentNameLabel" runat="server" class="graytitle" Text="Student Name :" />
<asp:Label ID="NameLbl" class="graytitle" runat="server">David</asp:Label>
</td>
</tr>
<tr>
<td>
<asp:Label ID="StudentCodeLabel" runat="server" class="graytitle" Text="Student Code :" />
<asp:Label ID="CodeLbl" runat="server" class="graytitle">1</asp:Label>
</td>
</tr>
</table>
<asp:Panel ID="PanelResult" runat="server">
</asp:Panel>
Namespaces
C#
using System.Data;
using System.IO;
VB.Net
Imports System.IO
Imports System.Data
Code
C#
protected void Page_Load(object sender, EventArgs e)
{
this.Bind_GridView();
}
private void Bind_GridView()
{
DataSet ds = new DataSet();
int j = 0;
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("Consumer Name", typeof(string)), new DataColumn("Buying Count No", typeof(int)) });
dt.Rows.Add("James", 12);
dt.Rows.Add("Marry", -13);
ds.Tables.Add(dt);
if (ds.Tables.Count > 0)
{
for (int i = 0; i < ds.Tables.Count; i++)
{
j = i + 1;
GridView objGV = new GridView();
objGV.ID = "ResultDG" + j;
objGV.AutoGenerateColumns = true;
objGV.DataSource = ds.Tables[i];
objGV.DataBind();
PanelResult.Controls.Add(objGV);
}
}
}
protected void ButtonExcel_Click(object sender, EventArgs e)
{
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/vnd.ms-excel";
Response.AddHeader("content-disposition", "attachment;filename=StudentInfo.xls");
Response.Charset = "";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
Bind_GridView();
tbl.RenderControl(htw);
PanelResult.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
}
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not Me.IsPostBack Then
Bind_GridView()
End If
End Sub
Private Sub Bind_GridView()
Dim ds As DataSet = New DataSet()
Dim j As Integer = 0
Dim dt As DataTable = New DataTable()
dt.Columns.AddRange(New DataColumn() {New DataColumn("Consumer Name", GetType(String)), New DataColumn("Buying Count No", GetType(Integer))})
dt.Rows.Add("James", 12)
dt.Rows.Add("Marry", -13)
ds.Tables.Add(dt)
If ds.Tables.Count > 0 Then
For i As Integer = 0 To ds.Tables.Count - 1
j = i + 1
Dim objGV As GridView = New GridView()
objGV.ID = "ResultDG" & j
objGV.AutoGenerateColumns = True
objGV.DataSource = ds.Tables(i)
objGV.DataBind()
PanelResult.Controls.Add(objGV)
Next
End If
End Sub
Protected Sub ExportToExcel(ByVal sender As Object, ByVal e As EventArgs)
Response.Clear()
Response.Buffer = True
Response.ContentType = "application/vnd.ms-excel"
Response.AddHeader("content-disposition", "attachment;filename=StudentInfo.xls")
Response.Charset = ""
Dim sw As StringWriter = New StringWriter()
Dim htw As HtmlTextWriter = New HtmlTextWriter(sw)
Bind_GridView()
tbl.RenderControl(htw);
PanelResult.RenderControl(htw)
Response.Write(sw.ToString())
Response.End()
End Sub
Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
End Sub
Screenshot
