Как эффективно настроить страницу GridView ASP.net для страницы, содержащей данную строку? - PullRequest
1 голос
/ 02 сентября 2011

У меня есть веб-страница с ASP.net GridView (с подкачкой страниц).GridView имеет более 10000 строк.Каждая строка имеет поле «ID».

Это упрощение, но предположим, что я хочу, чтобы пользователь мог вводить произвольный идентификатор строки в текстовое поле и автоматически переноситься в GridView с индексом страницы.установить индекс страницы, содержащей строку с указанным идентификатором.

Я пробовал следующее, но это не работает:

        DataSet ds = ReportManager.GetDevices(AdHocQuery);
        lblRecordCount.Text = String.Format("{0:#,0}", ds.Tables[0].Rows.Count);
        string sortDirection = AdHocQuery.SortDirection == "Descending" ? " DESC" : " ASC";
        DataView dv = new DataView(ds.Tables[0], string.Empty, AdHocQuery.SortColumnName + " " + sortDirection, DataViewRowState.CurrentRows);
        gvAsset.DataSource = dv;
        gvAsset.DataBind();

        // If there was a device ID passed in the Query String, then change the page to the page that contains the given ID.

        if (!string.IsNullOrEmpty(DeviceId))
        {
            // First, find the row number of the given device Id
            int rowNumber = 0;
            int i;
            for (i = 0; i < dv.Table.Rows.Count; i++)
            {
                DataRow row = dv.Table.Rows[i];
                if (row.Field<Guid>("deviceId").ToString().ToUpper() == DeviceId.ToUpper())
                {
                    rowNumber = i;
                    break;
                }
            }

            // The page index is going to be the row Number divided by the Page size
            // For example, if the page size is 10...
            // row 5 is on page 0,
            // row 15 is on page 1,
            // row 28 is on page 2, and so on
            int pageIndex = rowNumber / gvAsset.PageSize;
            gvAsset.PageIndex = pageIndex;

Этот код компилируется, но онпоследовательно показывает неверную страницу GridView.

Как я могу закодировать это так, чтобы отображалась правильная страница?

Ответы [ 4 ]

0 голосов
/ 02 сентября 2011

Я нашел ответ на свой вопрос.После поиска ответов я обнаружил, что если я хочу перечислить список строк в коде, мне нужно вызвать функцию DataView.GetEnumerator().Вот как выглядит код:

        DataSet ds = ReportManager.GetDevices(AdHocQuery);
        lblRecordCount.Text = String.Format("{0:#,0}", ds.Tables[0].Rows.Count);
        string sortDirection = AdHocQuery.SortDirection == "Descending" ? " DESC" : " ASC";
        DataView dv = new DataView(ds.Tables[0], string.Empty, AdHocQuery.SortColumnName + " " + sortDirection, DataViewRowState.CurrentRows);
        gvAsset.DataSource = dv;
        gvAsset.DataBind();

        // If there was a device ID passed in the Query String, then change the page to the page that contains the given ID.
        if (!string.IsNullOrEmpty(DeviceId))
        {
            // First, find the row number of the given device Id
            int rowNumber = 0;
            int i = 0;

            System.Collections.IEnumerator iterator = dv.GetEnumerator();
            while (iterator.MoveNext())
            {
                DataRowView drv = (DataRowView)iterator.Current;
                DataRow row = drv.Row;
                if (row.Field<Guid>("deviceid").ToString().ToUpper() == DeviceId.ToUpper())
                {
                    rowNumber = i;
                    break;
                }
                i++;
            }                

            // The page index is going to be the row Number divided by the Page size
            // For example, if the page size is 10...
            // row 5 is on page 0,
            // row 15 is on page 1,
            // row 28 is on page 2, and so on
            int pageIndex = rowNumber / gvAsset.PageSize;
            gvAsset.PageIndex = pageIndex;
        }
0 голосов
/ 02 сентября 2011

Звоните gvAsset.PageIndex = pageIndex перед привязкой сетки

0 голосов
/ 02 сентября 2011

Вы можете попробовать что-то вроде этого.Это сработало в моей ситуации.

//assuming there are SomeIDs from 1 to 100 in the database
//assuming pagesize of gridview is 10

DataTable table = GetSomeDataFunction(); //your data retrieval method

for (int i = 0; i < table.Rows.Count; i++)
{
    if (table.Rows[i].Field<int>("SomeID") == 11) //11 = ID you're looking for
    {
        GridView1.PageIndex = (i / GridView1.PageSize);
        break;
    }
}

GridView1.DataSource = table;
GridView1.DataBind();
0 голосов
/ 02 сентября 2011

Полагаю, вам нужно вызвать DataBind (), чтобы изменения в свойстве PageIndex были действительными.

...