我正在使用asp.nets webforms和gridview在我的网站上创建大数据表。我在代码中也有一个非常简单的方法,它允许整个gridview下载到excel文件。当我在sqlDataSource中创建selectCommand时,这一切都很有效。我的问题是我想在后面的代码中创建一个SelectCommand,这样我就可以添加很多参数并使其更具动态性。我知道你也可以在sqlDataSource SelectCommand中添加参数,但这对于我想要的代码背后的操作来说要简单得多。
在后面的代码中创建的selectCommand工作完美并显示gridview。问题是当我尝试下载到excel时,excel文件为空。换句话说,来自gridview的数据没有被转移。我认为它必须与我创建select命令的方式有关...这就是我的工作方式。
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>
构建select命令的代码隐藏
protected void SetSelectCommand()
{
sqlCommand = SELECT region FROM tablename
RegionCompliance.SelectCommand = sqlCommand;
}
如果我在sqlDataSource中构建了select命令,那么它将完全正常工作......任何人都可以看到为什么这不允许excel文件使用selectCommand和gridview数据
答案 0 :(得分:2)
代码块是being created during render,对于excel来说太晚了(如果调用它,可以检查调试器)。您可以在创建Excel文件时显式调用此方法,也可以调用DataBind()
。
答案 1 :(得分:0)
您需要使用页面方法...
protected void Page_Load(object sender, EventArgs e)
{
RegionCompliance.SelectCommand = "SELECT region FROM tablename"
}
你不应该试图像那样在线调用方法 - 那是经典的ASP东西。