Создание SelectCommand в коде, который работает так же, как создание команды в SQLDataSource.

Я использую веб-формы asp.nets и gridview для создания больших таблиц данных на моем веб-сайте. У меня также есть очень простой метод в коде, который позволяет загружать всю сетку в файл Excel. Все это отлично работает, когда я создаю selectCommand в sqlDataSource. Моя проблема в том, что я хочу создать SelectCommand в коде позади, чтобы я мог добавить множество параметров и сделать его намного более динамичным. Я знаю, что вы также можете добавлять параметры в sqlDataSource SelectCommand, но это намного проще сделать для того, что я хочу в коде позади.

Команда selectCommand, созданная в программном коде, отлично работает и отображает сетку. Проблема в том, что когда я пытаюсь скачать в 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;
}

Если я построил команду select в sqlDataSource, она сама будет работать отлично ... Может ли кто-нибудь понять, почему это не позволяет файлу excel использовать selectCommand и данные gridview


person kev670    schedule 16.08.2012    source источник


Ответы (2)


Блок кода создается во время рендеринга., что уже слишком поздно для Excel (вы можете проверить с помощью отладчика, вызывается он или нет). Вы можете вызвать этот метод явно при создании файла Excel, а также вызвать DataBind().

person Amiram Korach    schedule 16.08.2012
comment
Я вспомнил RegionCompliance.SelectCommand = sqlCommand; в методе загрузки Excel, и это сработало для меня ... Спасибо - person kev670; 23.08.2012

Вам нужно использовать методы страницы ...

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

Вы не должны пытаться вызывать такие встроенные методы - это классическая штука ASP.

person CoderMarkus    schedule 16.08.2012