先通过程序移除排序等按钮(LinkButton)才能导出,如:
Dim iCol As Int32
Dim tb As Table Dim links As New ArrayList()
Dim ilinks As New ArrayList() Dim link As LinkButton tb = CType(dgDisplay.Controls(0), Table) For iCol = 0 To tb.Rows(0).Cells.Count - 1
With tb.Rows(0).Cells(iCol)
Try
link = CType(.Controls(0), LinkButton)
links.Add(link)
ilinks.Add(iCol)
.Controls.RemoveAt(0)
.Text = link.Text
Catch End Try
End With
Next
Dim iCol As Int32
Dim tb As Table Dim links As New ArrayList()
Dim ilinks As New ArrayList() Dim link As LinkButton tb = CType(dgDisplay.Controls(0), Table) For iCol = 0 To tb.Rows(0).Cells.Count - 1
With tb.Rows(0).Cells(iCol)
Try
link = CType(.Controls(0), LinkButton)
links.Add(link)
ilinks.Add(iCol)
.Controls.RemoveAt(0)
.Text = link.Text
Catch End Try
End With
Next
把要导的东西
在另一页datagrid中导出就说一个按钮触发 另一页的 datagrid(NO排序等)导出 (加个sql为url参数,来决定datagrid的内容)这样就能解决了
(我能想到的这是最快的,^_^不过好用就行)
名称好解决啊 给他个textbox 接受个名称 付到 Response.AppendHeader("Content-Disposition","attachment;filename=XXXXXX.xls");
就行的 路径 就不知道了
我看 选路径 代价太大了
如果象你说的那样,我还不如在同一个页面上放两个属性完全相同的DataGrid,其中一个显示,另一个隐藏,隐藏那个只实现绑定数据,不分页也不排序岂不更简单?
应该 基本 没什么音响(没试过 )
System.Web.UI.WebControls.TableCellCollection cells = (System.Web.UI.WebControls.TableCellCollection)item.Cells;
foreach (System.Web.UI.WebControls.TableCell cell in cells)
{
if (cell.Controls.Count != 0)
{
foreach (System.Web.UI.Control ctrl in cell.Controls)
{
if (ctrl is Button)
{
Button btn = (Button) ctrl;
btn.Text = HttpUtility.HtmlEncode(btn.Text);
}
else if (ctrl is HyperLink)
{
HyperLink hyp = (HyperLink) ctrl;
hyp.Text = HttpUtility.HtmlEncode(hyp.Text);
}
else if (ctrl is LinkButton)
{
LinkButton lb = (LinkButton) ctrl;
lb.Text = HttpUtility.HtmlEncode(lb.Text);
}
else if(ctrl is Label)
{
Label objL = (Label)ctrl;
if(objL.Text == "REJECTED")
objL.ForeColor = System.Drawing.Color.Red;
}
}
}
else
{
if (cell.Text.ToLower().Trim()!=" ")
cell.Text = HttpUtility.HtmlEncode(cell.Text);
}
}
}
<%@ Import Namespace="System.Drawing" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %> <script Language="C#" runat="server">
private void Button1_Click(object sender, System.EventArgs e)
{
//export to excel Response.Clear();
Response.Buffer= true;
Response.ContentType = "application/vnd.ms-excel";
Response.Charset = "";
this.EnableViewState = false; System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter); this.ClearControls(dg);
dg.RenderControl(oHtmlTextWriter); Response.Write(oStringWriter.ToString()); Response.End();
} private void Page_Load(object sender, System.EventArgs e)
{
if (!IsPostBack)
{ SqlConnection conn = new SqlConnection ("data source=(local);initial catalog=Northwind;Pwd=p@ssw0rd;User ID=sa");
SqlCommand cmd = new SqlCommand ("Select LastName, FirstName, Title, TitleOfCourtesy, BirthDate, HireDate, Address, City, Region, PostalCode, Country from Employees", conn);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);
dg.DataSource = ds.Tables[0];
dg.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;
}
</script>
<html>
<body leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<form id="frm" runat="server">
<asp:Button id="Button1" runat="server" Text="Export to Excel"
OnClick="Button1_Click"></asp:Button><BR>
<asp:Datagrid id="dg" runat="server" AutoGenerateColumns="True"
AllowSorting="true" AllowPaging="true"
CellPadding="3" PageSize=3>
<columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:LinkButton runat="server" CommandName="Edit"
CausesValidation="false" ID="btnView"
Text="Edit"/>
</ItemTemplate>
</asp:TemplateColumn> </columns>
</asp:datagrid> <BR> </form>
</body>
</html>