Общее количество строк SqlDataSource GridView
Поэтому у меня есть GridView, настроенный на SqlDataSource. Пейджинг включен, и у меня есть выпадающее меню, которое изменяет количество строк, отображаемых на странице. Я могу получить общее количество строк, отображаемых на одной странице, но я также хочу показать общее количество строк. (Например: "Показано 1 - 25 из 315").
Итак, мои вопросы:
1) Как я могу получить общее количество строк для всего источника данных? (не только GridView) Код, который у меня есть, метод OnSelectedData, не работает и возвращает ноль.
2) Как мне заставить номера отображаться по-разному для каждой страницы? Например, на второй странице нужно сказать "Показано 26 - 50 из 315"
Вот мой код (C#):
public partial class UserControls_BloombergAllUsersControl : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
}
int gridViewTotalRowCount;
protected void onSelectedData(object sender, SqlDataSourceStatusEventArgs e)
{
gridViewTotalRowCount = e.AffectedRows;
}
protected void GridView1_DataBound(object sender, EventArgs e)
{
int pageRowsCount = GridView1.Rows.Count;
Total1.Text = "Showing 1 - " + pageRowsCount.ToString() + " of " + gridViewTotalRowCount.ToString();
}
private void BindGridView1()
{
try
{
this.GridView1.DataBind();
if (Convert.ToInt32(DropDownList1.SelectedValue) != null)
GridView1.PageSize = Convert.ToInt32(DropDownList1.SelectedValue);
}
catch (Exception ex)
{ throw ex; }
}
protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
GridView1.PageIndex = e.NewPageIndex;
BindGridView1();
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
BindGridView1();
}
}
Если бы кто-то мог помочь, это было бы здорово. Спасибо!
2 ответа
Вы можете установить для информации подкачки текст Total1 в onSelectedData
обработчик как следующий
protected void onSelectedData(object sender, SqlDataSourceStatusEventArgs e)
{
int startRowOnPage = (GridView1.PageIndex * GridView1.PageSize) + 1;
int lastRowOnPage = startRowOnPage + GridView1.Rows.Count - 1;
int totalRows = e.AffectedRows;
Total1.Text = "Showing " + startRowOnPage.ToString() +
" - " + lastRowOnPage + " of " + totalRows;
}
Таким образом, ваш SQLDataSource должен быть таким:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
OnSelected="onSelectedData"
... >
</asp:SqlDataSource>
И вам не нужно ничего делать для подкачки информации в GridView1_DataBound
,
Я имею в виду, вы могли бы удалить OnDataBound="GridView1_DataBound"
из вашей декларации GridView.
РЕДАКТИРОВАНИЕ
Чтобы установить PageSize
, вы должны установить для него значение по умолчанию, например, следующий пример:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Convert.ToInt32(DropDownList1.SelectedValue) != null)
GridView1.PageSize = Convert.ToInt32(DropDownList1.SelectedValue);
}
}
Поскольку вы используете SqlDataSource, попробуйте этот код:
Protected Sub SqlDataSource1_Selected(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceStatusEvent Args) Handles
SqlDataSource1.Selected
Dim cnt As Integer = e.AffectedRows
End Sub