2013-12-06 4 views
2

Итак, у меня есть GridView, настроенный на SqlDataSource. Пейджинг включен, и у меня есть раскрывающееся меню, которое изменяет количество строк, отображаемых на странице. Я могу получить общее количество строк, отображаемых на одной странице, но я хочу также показать общее количество строк. (Например: «Показано 1 - 25 из 315»).Total Row Count SqlDataSource GridView

Итак, мои вопросы:

1) Как получить общее количество строк для всей DataSource? (а не только 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(); 
} 

}

Если кто-то может помочь, что было бы здорово , Благодаря!

+0

взглянуть на это - http://stackoverflow.com/ Вопросы/5788329/count-total-rows-of-gridview-with-pagination – Blake

ответ

6

можно установить пейджинга информацию 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.

EDITED

Чтобы установить PageSize, вы должны установить значение по умолчанию для этого, например, как в следующем примере:

protected void Page_Load(object sender, EventArgs e) 
{  
    if (!IsPostBack) 
    { 
     if (Convert.ToInt32(DropDownList1.SelectedValue) != null) 
      GridView1.PageSize = Convert.ToInt32(DropDownList1.SelectedValue); 
    } 
} 
+0

Я пробовал, и это не сработало. Я установил в коде для своего GridView OnDataBound = «GridView1_DataBound», и я изменил имя на «onSelectedData». Это дало мне ошибку, говоря, что он не может загрузить пользовательский элемент управления. Затем, когда я добавил только переменные в OnSelectedData и текст в GridView1_DataBound, как раньше, цифры были нулями. Нужен ли мне метод в коде для SQLDataSource? Я не уверен, как заставить его работать. – cocoa

+0

К сожалению, в моем ответе ** onSelectedData ** метод является обработчиком для ** OnSelected ** события ** SqlDataSource ** control ** NOT ** OnDataBound событие GridView. Повторите мой ответ, я отредактировал его. – Alice

+1

Спасибо! Казалось, это сработало! За исключением одной мелочи, когда таблица сначала загружается, lastRowOnPage отображается как ноль, но когда я перехожу на другие страницы и возвращаюсь на первую страницу, она отображается как 10. – cocoa

0

Поскольку вы используете 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