2009-12-13 10 views
10

Ciao a tuttiCome ottenere il conteggio delle righe di ObjectDataSource

Come posso ottenere il conteggio delle righe di ObjectDataSouce?

Uso ObjectDataSource e DataList. Voglio mostrare qualche cosa all'utente, ad esempio in un'etichetta quando ci sono determinate righe restituite da ObjectDataSource. Una delle situazioni è quando non c'è nessuna registrazione.

Grazie.

risposta

7

che stavo cercando la stessa risposta ... Un'altra soluzione che ho finito per usare è la seguente: Questo si trova su un file VB dietro una pagina aspx. Gestisce l'evento "selezionato" dell'origine dati.

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 
7

Il ObjectDataSource non ha un modo diretto per ottenere il numero totale di righe. Uno dei motivi di ciò è che se tutto ciò che si desidera è il conteggio totale delle righe, allora non è affatto necessaria l'origine dati! Per ottenere il conteggio delle righe solo parlare al tuo livello Business Logic (BLL) e ottenere le righe totali:

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

Il ObjectDataSource ha un SelectCountMethod che può essere utilizzato quando i dati controlli associati, come la GridView necessità di accedere al numero totale di righe. Tuttavia, questo viene utilizzato solo mentre si esegue anche un'operazione Select. Cioè, non c'è modo di solo ottenere il conteggio delle righe. Il conteggio delle righe viene utilizzato solo in modo che il controllo associato ai dati possa visualizzare un controllo per il cercapersone: non viene utilizzato per nient'altro.

0

È possibile ottenere questo molto semplicemente utilizzando un modello di cercapersone, ad es.

 <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> 

Questo produrrà il testo "Risultati da x a y di z" includendo un controllo per l'ultima pagina.

Cheers,

Ed

3

trovato questo here:

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; 
} 
0
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 
+1

Benvenuto stackoverflow! È sempre meglio fornire una breve descrizione per un codice di esempio per migliorare l'accuratezza del post :) –

0

Nel mio caso l'ObjectDataSource è un insieme di dati, in modo da ottenere il numero di riga in caso objectdatasource_selected come questo

e.ReturnValue.tables(0).rows.count.ToString 
0
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 
Problemi correlati