先通过程序移除排序等按钮(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

解决方案 »

  1.   

    简单想法 
    把要导的东西 
    在另一页datagrid中导出就说一个按钮触发 另一页的 datagrid(NO排序等)导出 (加个sql为url参数,来决定datagrid的内容)这样就能解决了
    (我能想到的这是最快的,^_^不过好用就行)
      

  2.   

    你的意思是在点击按钮以后,生成一个新的datagrid?然后把它导出?
      

  3.   

    对  而且 是在另一页面 (这页专们做这事,流输出完后就自动close) 这也不错的
      

  4.   

    我也在做导出的模块功能,不过我实现的方式与你上边的代码不太一样,但是大致的意思也差不多,我所要导出的数据是动态的,即根据用户自己的选择导出一个表中的其中的一些列、由用户自己限制范围的数据!!!!给你提供一种想法,我还么有完全实现,所以........:)希望多多交流!你可以把DataGrid中的数据提到一张很“单一”的数据表中,而后采用OWC来导出EXCEL.....看看还出现你所说的问题不?
      

  5.   

    1、我要实现导出时类似下载的对话框,可以让用户选择名称和路径 
     名称好解决啊 给他个textbox 接受个名称 付到  Response.AppendHeader("Content-Disposition","attachment;filename=XXXXXX.xls"); 
    就行的 路径 就不知道了
    我看 选路径 代价太大了   
      

  6.   

    To: chentaoyql(chentaoyql) 
    如果象你说的那样,我还不如在同一个页面上放两个属性完全相同的DataGrid,其中一个显示,另一个隐藏,隐藏那个只实现绑定数据,不分页也不排序岂不更简单?
      

  7.   

    大哥说过了啊是排序和 分页 影响了 导出的代码 你在另一页的page_load 里 做 输出啊 输给你了 都
      

  8.   

    把输出加在pageload里面 在输出后close 页面
    应该 基本 没什么音响(没试过 )
      

  9.   

    对DataGrid每一个DataGridItem进行处理,根据需要可以扩展
    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);

    }
    }
    }
      

  10.   

    <%@ Page language="C#" Debug="true" %> 
    <%@ 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>