Pergunta

Olá a todos

Como posso obter contagem de linhas do objectDatasouce?

Eu uso o objectDataSource e o Datalist. Quero mostrar algo ao usuário, por exemplo, em um rótulo quando há certa linha devolvida pelo ObjectDataSource. Uma situação é quando não há registro.

Obrigada .

Foi útil?

Solução

Eu estava procurando a mesma resposta ... outra solução que acabei usando é a seguinte: Isso é encontrado em um arquivo .vb atrás de uma página .aspx. Ele lida com o evento "selecionado" do DataSource.

Protected Sub ObjectDataSource1_Selected(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ObjectDataSourceStatusEventArgs) Handles ObjectDataSource1.Selected
    ' Select data for rowcount
    Dim dt As DataTable = e.ReturnValue
    ' Set row count label
    Me.lblCount.Text = dt.Rows.Count.ToString
End Sub

Outras dicas

o ObjectDataSource Não tem uma maneira direta de obter a contagem total de linhas. Uma das razões para isso é que, se tudo o que você deseja é a contagem total da linha, você não precisa da fonte de dados! Para obter a contagem de linhas, fale com sua camada de lógica de negócios (BLL) e obtenha o total de linhas:

MyBLL bll = new MyBLL();
int customerRowCount = bll.Customers.GetRowCount();

o ObjectDataSource tem um SelectCountMethod isso pode ser usado quando controles ligados a dados, como o GridView precisa acessar a contagem total de linhas. No entanto, isso é usado apenas ao realizar uma operação de seleção. Isto é, não há como Obtenha a contagem de linhas. A contagem de linhas é usada apenas para que o controle vinculado a dados possa exibir um controle de pager - ele não é usado para mais nada.

Encontrei isso aqui:

bool bGetSelectCount;
protected void ObjectDataSource1_Selected(object sender, ObjectDataSourceStatusEventArgs e)
{
    if (bGetSelectCount)
        TextBox1.Text = e.ReturnValue.ToString(); 
}

protected void ObjectDataSource1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
    bGetSelectCount = e.ExecutingSelectCount;
}

Você pode conseguir isso simplesmente usando um modelo de pager, por exemplo

       <asp:DataPager PagedControlID="PagedControlId" PageSize="20" QueryStringField="QueryStringName" ID="InfoPager" runat="server">
           <Fields>
               <asp:TemplatePagerField>
                   <PagerTemplate>
                        Showing results 
                        <%=InfoPager.StartRowIndex + 1 %> 
                        to 
                        <%= (new []{(InfoPager.StartRowIndex + InfoPager.PageSize),InfoPager.TotalRowCount})
                                      .OrderBy(x => x)
                                      .First()%> 
                        of 
                        <%=InfoPager.TotalRowCount %>
                   </PagerTemplate>
               </asp:TemplatePagerField>
           </Fields>
       </asp:DataPager>

Isso produzirá o texto "Resultados X a Y de Z", incluindo uma verificação da última página.

Saúde,

Ed

Protected Sub objItemsList_Selected(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ObjectDataSourceStatusEventArgs) Handles objItemsList.Selected
    lblMessage.Text = DirectCast(e.ReturnValue, DataTable).Rows.Count & " record(s) found"
End Sub

No meu caso, o objectDataSource é um conjunto de dados, então eu recebo o número da linha no evento ObjectDataSource_Selected como este

e.ReturnValue.tables(0).rows.count.ToString 
Protected Sub myODS_Selected(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.ObjectDataSourceStatusEventArgs) Handles myODS.Selected
    Dim s As String = e.ReturnValue.ToString
    Dim rows As Integer
    Int32.TryParse(s, rows)

    'rows variable now holds the total number of results, not just what's displayed on the current gridview page
End Sub
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top