Подтвердить что ты не робот

Как получить количество строк объекта ObjectDataSource

Приветствую вас всех

Как я могу получить количество строк объекта ObjectDataSouce?

Я использую ObjectDataSource и DataList. Я хочу показать что-то пользователю, например, в метке, когда есть определенная строка, возвращаемая ObjectDataSource. Одна из ситуаций заключается в отсутствии записи.

Спасибо.
4b9b3361

Ответ 1

Я искал тот же ответ... Еще одно решение, которое я использовал, следующее: Это находится в файле .vb за страницей .aspx. Он обрабатывает "выбранное" событие источника данных.

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

Ответ 2

ObjectDataSource не имеет прямого способа получить общее количество строк. Одна из причин этого заключается в том, что если все, что вам нужно, это общее количество строк, то вам вообще не нужен источник данных! Чтобы подсчитать количество строк, просто поговорите со своим бизнес-логическим слоем (BLL) и получите полные строки:

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

ObjectDataSource имеет SelectCountMethod, который может использоваться, когда для управления данными, например, GridView, необходимо получить доступ к суммарному количеству строк. Однако это используется только при выполнении операции Select. То есть, нет возможности получить только количество строк. Счетчик строк используется только для того, чтобы связанный с данными элемент управления мог отображать элемент управления пейджером - он не используется ни для чего другого.

Ответ 3

Нашел здесь:

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

Ответ 4

Вы можете достичь этого очень просто, используя шаблон пейджера, например.

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

Это приведет к получению текста "Результаты x to y of z", включая проверку последней страницы.

Приветствия,

Ed

Ответ 5

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

Ответ 6

В моем случае ObjectDatasource является набором данных, поэтому я получаю номер строки в событии objectdatasource_selected, подобном этому

e.ReturnValue.tables(0).rows.count.ToString 

Ответ 7

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 displayed on the current gridview page
End Sub