0

我正在使用 asp.nets webforms 和 gridview 在我的网站上创建大型数据表。我在后面的代码中还有一个非常简单的方法,它允许整个 gridview 下载到一个 excel 文件。当我在 sqlDataSource 中创建 selectCommand 时,这一切都完美无缺。我的问题是我想在后面的代码中创建一个 SelectCommand,这样我就可以添加很多参数并使其更加动态。我知道您也可以在 sqlDataSource SelectCommand 中添加参数,但这对于我想要在后面的代码中执行的操作要简单得多。

在后面的代码中创建的 selectCommand 可以完美运行并显示 gridview。问题是当我尝试下载到excel时,excel文件是空的。换句话说,gridview 中的数据不会被转移。我认为这一定与我创建选择命令的方式有关......这就是我的做法。

.aspx 文件:

<asp:SqlDataSource ID="RegionCompliance" Runat="server"
    ConnectionString="<%$ ConnectionStrings:ApplicationServices %>">        
</asp:SqlDataSource>   

<%  
    SetSelectCommand(); // this is where the select command is created
%>

<h2>
    Download To:    
    <asp:LinkButton  ID="Button1" runat="server" OnClick="DownloadToExcel" Text="Excel" />
</h2>


    <asp:GridView 

        ID="GridView1" 
        DataSourceID="RegionCompliance" 
        DataKeyNames="Region">

        <Columns>
            <asp:BoundField ReadOnly="true" HeaderText="Region" DataField="Region"></asp:BoundField>
        </Columns>
   </asp:GridView>

构建选择命令的代码隐藏

protected void SetSelectCommand()
{
    sqlCommand = SELECT region FROM tablename
    RegionCompliance.SelectCommand = sqlCommand;
}

如果我在 sqlDataSource 中构建了 select 命令,它将完美地工作......谁能明白为什么这不允许 excel 文件使用 selectCommand 和 gridview 数据

4

2 回答 2

2

代码块是在 render 期间创建的,这对于 excel 来说为时已晚(您可以使用调试器检查它是否被调用)。您可以在创建 excel 文件时显式调用此方法,也可以调用DataBind().

于 2012-08-16T16:15:38.773 回答
0

您需要使用页面方法...

protected void Page_Load(object sender, EventArgs e)
{
    RegionCompliance.SelectCommand = "SELECT region FROM tablename"
}

你不应该尝试像那样调用内联方法——那是经典的 ASP 东西。

于 2012-08-16T16:13:57.483 回答