Использование SqlDataAdapter для страницы источника SqlDataReader

Этот вопрос кажется распространенным, и я уже рассмотрел этот ответ.

К сожалению, мою страницу до сих пор не просматривают. Вот как выглядит мой код на C#:

 SqlCommand command = new SqlCommand("(SELECT ......", Connection);
 SqlDataAdapter myAdapter = new SqlDataAdapter(command);
 DataTable dt = new DataTable();
 myAdapter.Fill(dt);

 command.Connection = connection;
 command.Connection.Open();

 GridView1.DataSource = dt;
 GridView1.DataBind();
 GridView1.AllowPaging = true;
 GridView1.PageSize = 15;

 command.Connection.Close();
 command.Connection.Dispose();

К сожалению, когда я это делаю, мой пейджинг не отображается. Я делаю что-то неправильно?

Спасибо


person Kevin    schedule 12.04.2013    source источник
comment
Вы точно получаете более 15 записей с вашим выбором? Кроме того, установите все свойства, связанные с пейджингом, ДО вызова метода Databind().   -  person Hanlet Escaño    schedule 13.04.2013
comment
Вау, это было легко. Мне просто нужно было установить его перед привязкой данных(). Спасибо!   -  person Kevin    schedule 13.04.2013
comment
О, в чем разница между OnPageIndexChanging и OnPageIndexChanged?   -  person Kevin    schedule 13.04.2013
comment
PageIndexChanging происходит при нажатии одной из кнопок пейджера, но до того, как элемент управления GridView обрабатывает операцию разбиения по страницам, а PageIndexChanged происходит при нажатии одной из кнопок пейджера, но после того, как элемент управления GridView обрабатывает операцию разбиения по страницам. msdn.microsoft.com/en- us/library/ и msdn.microsoft.com/en-us/library/   -  person Hanlet Escaño    schedule 13.04.2013


Ответы (2)


Задайте все свойства, связанные с пейджингом, до вызова метода Databind(). При использовании Пользовательского пейджинга вам придется обрабатывать событие GridView1_PageIndexChanging. Вам нужно изменить текущий PageIndex и повторно привязать свой GridView следующим образом:

void bindGridview()
{
    SqlCommand command = new SqlCommand("(SELECT ......", Connection);
    SqlDataAdapter myAdapter = new SqlDataAdapter(command);
    DataTable dt = new DataTable();
    myAdapter.Fill(dt);

    command.Connection = connection;
    command.Connection.Open();
    GridView1.AllowPaging = true;
    GridView1.PageSize = 15;
    GridView1.DataSource = dt;
    GridView1.DataBind();


    command.Connection.Close();
    command.Connection.Dispose();
}

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    bindGridview();
}

Если вы также привязываете GridView к Page_Load, сделайте это следующим образом:

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
        bindGridview();
}
person Hanlet Escaño    schedule 12.04.2013
comment
Моя первая привязка данных() была на pageLoad. Однако, когда я добавляю if(!IsPostBack) в свой материал GridView1_PageIndexChanging, когда я нажимаю, чтобы перейти на следующую страницу gridview, в первый раз ничего не происходит. Когда я снова нажимаю, он переходит на следующую страницу. Без оператора if это происходит при первом нажатии - person Kevin; 13.04.2013
comment
Не добавляйте !IsPostBack в PageIndexChanging, просто в Page_Load, как я сказал в ответе :) Я обновлю его с помощью события, чтобы избежать путаницы: P - person Hanlet Escaño; 13.04.2013
comment
Ах ок большое спасибо! Из любопытства, что это делает? Потому что это работает без !IsPostBack в загрузке страницы? - person Kevin; 13.04.2013
comment
я сомневаюсь, что индексация будет работать без !IsPostback... удалите его и попробуйте... его установка обеспечит загрузку GridView только один раз во время pageload, а не все на postbacks(eg. any click event is a postback).. поэтому, когда вы нажимаете на номера страниц. .это postback - person Praveen Nambiar; 13.04.2013

Вам нужно добавить событие PageIndexChanging для GridView, чтобы включить paging.

protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    GridView1.PageIndex = e.NewPageIndex;
    bindGridview(); 
}
person Praveen Nambiar    schedule 12.04.2013