Как получить количество строк ObjectDataSource
Привет всем
Как я могу получить количество строк ObjectDataSouce ?
Я использую ObjectDataSource и DataList . Я хочу показать что-то пользователю, например, в метке, когда есть определенная строка, возвращаемая ObjectDataSource . Одна из ситуаций - когда нет записи .
Спасибо.7 ответов
Я искал тот же ответ... Другое решение, которое я использовал, - следующее: Это найдено на .файл vb позади an .страница ASPX. Он обрабатывает событие "selected" источника данных.
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
на ObjectDataSource
не имеет прямого способа получить общее количество строк. Одна из причин этого заключается в том, что если все, что вам нужно, это общее количество строк, то вам вообще не нужен источник данных! Чтобы получить количество строк, просто поговорите со своим уровнем бизнес-логики (BLL) и получите общие строки:
MyBLL bll = new MyBLL();
int customerRowCount = bll.Customers.GetRowCount();
на ObjectDataSource
есть SelectCountMethod
это может использоваться, когда элементы управления с привязкой данных, такие как GridView
необходимо получить доступ к общему количеству строк. Однако, это используется только при выполнении Выберите операция. То есть, нет никакого способа только получить количество строк. Количество строк используется только для того, чтобы элемент управления с привязкой к данным мог отображать элемент управления пейджера - он не используется ни для чего другого.
нашел это здесь:
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;
}
вы можете достичь этого очень просто, используя шаблон пейджера, например
<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 к y из z", включая проверку для последней страницы.
спасибо,
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
в моем случае ObjectDatasource является набором данных, поэтому я получаю номер строки в objectdatasource_selected событие, подобное этому
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