Como obter contagem de linhas do objectDataSource
-
19-09-2019 - |
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 .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 só 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