C#: como preencher um DataPager com um DataReader?

6 respostas
Roger75
Tenho o seguinte código C#:
conn = new MySqlConnection(strConn);
                MySqlCommand cmd = new MySqlCommand(strConn, conn);


                ///
                MySqlDataReader Reader;
                cmd.CommandText = "Select nome from usuarios ";

                conn.Open();
                Reader = cmd.ExecuteReader();
                string all_rows = "";
                while (Reader.Read())
                {
                    string thisrow = "";
                    for (int i = 0; i < Reader.FieldCount; i++)
                        thisrow += Reader.GetValue(i).ToString() + ",";
                    //listBox1.Items.Add(thisrow);
                    all_rows = all_rows + thisrow + "\n";

                }
                //DataPager

Eu queria preencher o DataPager, que é um controle de lista paginada, diretamente com o objeto Reader, só que pelo que andei olhando (http://forums.asp.net/t/1334425.aspx), parece que isso é feito atribuindo ao DataSource do DataPager o Reader, porém acho que não existe mais este modo de atribuição DataSource... só mostra DataBind e DataBinding pelo Visual Studio...

6 Respostas

W

Sim, a responsabilidade pelos dados eh dos DataSource controls e dos data-bound Controls.

Se vc estiver usando um SqlDataSource, vc pode utilzar dois modos (DataSet, DataReader).

DataSet carrega todos os dados na memoria, permitindo vc adicionar paginacao, ordenacao, e operacoes com os dados em geral e caching.
DataReader se vc somente quiser mostrar dados o DataReader eh mais indicado. Geralmente DataReader, eh usando pra carregar dados num dropbox, por exemplo.

No seu caso, seria melhor vc usar DataSet.

Da uma lida aqui para maiores informacoes:
http://msdn.microsoft.com/en-us/library/dz12d98w.aspx

Quando a DataPager, veja esse exemplo no MSDN:

<asp:ListView runat="server" ID="ListView1" 
    DataSourceID="SqlDataSource1">
  <LayoutTemplate>
    <table runat="server" id=" table1">
      <tr runat="server" id="itemPlaceholder">
      </tr>
    </table>
    <asp:DataPager runat="server" ID="DataPager" PageSize="5">
        <Fields>
          <asp:NumericPagerField ButtonCount="10"
               PreviousPageText="<--"
               NextPageText="-->" />
        </Fields>
    </asp:DataPager>
  </LayoutTemplate>
  <ItemTemplate>
    <tr runat="server">
      <%-- Data-bound content. --%>
    </tr>
  </ItemTemplate>
</asp:ListView>

O DataPager eh adicionado ao layoutTemplate do ListView, eh soh isso que vc precisa.

//Daniel

Roger75

Mas no meu caso eu queria usar o ListView sem o parâmetro “SqlDataSource1”, pois essa parte de conexão ao banco é feita pelo código, e não na página aspx. O problema é que ele não deixa criar a ListView sem o SQLDataSource…

W

Sem problemas, ListView tem a DataSource property.

Aqui tem um exemplo de como implementar. O exemplo utiliza LINQ to SQL mas eu acho que da pra dar um base para o que vc quer fazer.

http://goo.gl/4K2D5

//Daniel

Roger75

Sem problemas, ListView tem a DataSource property.

Aqui tem um exemplo de como implementar. O exemplo utiliza LINQ to SQL mas eu acho que da pra dar um base para o que vc quer fazer.

http://goo.gl/4K2D5

//Daniel

Tentei usar o DataContext, mas não acha os assembly System.Data.Linq… acho que é porque o Framework é .NET 3.5.

Roger75

Acabei vendo outro jeito de usar esse DataPager:
http://www.codeproject.com/KB/aspnet/ListViewWithDataPager.aspx

Valeu

W

Roger75:
Acabei vendo outro jeito de usar esse DataPager:
http://www.codeproject.com/KB/aspnet/ListViewWithDataPager.aspx

Valeu

Ah sim, setando o PagedControlID no DataPager.

Legal que funcionou!

//Daniel

Criado 30 de novembro de 2011
Ultima resposta 30 de nov. de 2011
Respostas 6
Participantes 2