GridView Paging Issue - PullRequest
       8

GridView Paging Issue

3 голосов
/ 12 мая 2011

Я использую элемент управления gridview и выполняю пейджинг и сортировку вручную.Вот метод Пейджинга:

protected void gdvMainList_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gdvMainList.PageIndex = e.NewPageIndex;
        gdvMainList.DataSource = dtConsentReleaseList;
        gdvMainList.DataBind();
    }

У меня есть статическая таблица данных с идентификатором столбца:

dtConsentReleaseList.Columns.Add("Id");
            dtConsentReleaseList.Columns.Add("StartDate");
            dtConsentReleaseList.Columns.Add("EndDate");
            dtConsentReleaseList.Columns.Add("Contact");

Я назначаю datakeynames "Id" в моем GridView.И у меня также есть кнопка печати в каждом ряду.Когда я нажимаю эту кнопку, этот код выполняется:

else if (e.CommandName == "New")
        {                
            int selectedIndex = Convert.ToInt32(e.CommandArgument);
            int consentReleaseId = Convert.ToInt32(gdvMainList.DataKeys[selectedIndex].Value);
            string openReportScript = Utility.OpenReport(ResolveClientUrl("~/Reports/Consumer/ConsentReleaseReport.aspx?Id=" + consentReleaseId + "&ReportTitle=ConsentForRelease"));
            ScriptManager.RegisterClientScriptBlock(upConsentRelease, upConsentRelease.GetType(), "Pop up", openReportScript, true);
        }

, но когда я меняю страницу и нажимаю кнопку печати, в этой строке возникает исключение:

int consentReleaseId = Convert.ToInt32(gdvMainList.DataKeys[selectedIndex].Value);

Исключение составляет:

Index was out of range. Must be non-negative and less than the size of the collection.Parameter name: index

Полагаю, я что-то не так делаю в методе подкачки.

Любая помощь, пожалуйста?

Ответы [ 3 ]

1 голос
/ 12 мая 2011

Вы пытаетесь получить значение из массива на основе произвольного идентификатора вместо фактического индекса.Но вам не нужно этого делать вообще.Вам не нужно хранить свой идентификатор в DataKeys, и вам не нужно ничего получать, используя индекс предмета.Просто вытащите свой идентификатор из CommandArgument.

<asp:ImageButton CommandName="New" CommandArgument='<%# Eval("Id") %>' ID="ibtnPrint" runat="server" ImageUrl="~/App_Themes/Default/images/print.png" />

А затем в коде позади:

int consentReleaseId = int.Parse(e.CommandArgument);
0 голосов
/ 12 мая 2011

Установите имя ключа данных прямо перед тем, как установить источник данных и связать вид сетки.

Кроме того,

string[] dk = new string[1] {"MyID"};
myGridView.DataKeyNames = dk;
myGridView.DataSource = ds;
myGridView.DataBind();
0 голосов
/ 12 мая 2011

Я предполагаю, что вы связываете сетку в коде (возможно, событие page_load), и он не содержит значений при обратной передаче.

Также попробуйте передать идентификатор как CommandArgument. Насколько я могу судить, если у вас есть доступ к идентификатору выбранной записи, вам вообще не нужен индекс строки сетки. (GridView по умолчанию передает индекс строки как CommandArgument)

...