2013-04-08 2 views
0

У меня есть список, в котором я разместил datapager следующим образом. Я использую источник данных SQl и привязываю записи к ListView.data pager in listview Проблема

asp:ListView runat="server" ID="ListView1" DataKeyNames="ProductId,GameName" DataSourceID="GameTable" OnItemCommand="On_Select_Item" 

и DataPager в LayoutTemplate

И в шаблоне элемента я помещаю кнопку, при нажатии она вызывает метод, где я пытаюсь принести DatakeyName значения. Он работает отлично на первой странице, когда предоставляется пейджер, но когда он перемещается на другую страницу в пейджере, он бросает мне исключение. Вот код нажатия кнопки,

protected void On_Select_Item(object sender, ListViewCommandEventArgs e) 
    { 

     if (String.Equals(e.CommandName, "AddtoCart")) 
     { 
      //checks if the user is logged in 
      if (User.Identity.IsAuthenticated) 
      { 
       ListViewDataItem dataItem = (ListViewDataItem)e.Item; 
       DropDownList dl = e.Item.FindControl("DropDownList") as DropDownList; 
       String val=""; 

       if (dl != null) 
       { 
        val = dl.SelectedValue; //Get the selected value from DropDownList 
       } 
       String price = Convert.ToString(e.CommandArgument).Trim(); //Get the price for the selected game. 

------------- Исключение брошено ниже линии ---------

  string ProductId = 
      ListView1.DataKeys[dataItem.DataItemIndex]["ProductId"].ToString(); //Product Id for the selected game. 
      string GameName = ListView1.DataKeys[dataItem.DataItemIndex]["GameName"].ToString(); //gamename 

............................... 
............................. 

}

+1

В чем исключение? – Melanie

+0

Любые особые причины использования DataPager? вы можете использовать функцию подкачки и сортировки inbuild, которая идет с gridview/listview, и используя sqldatasource (как поставщик данных для вашей сетки), вам не нужно вручную выполнять подкачку, она автоматически заботится о pagin, индексе страницы. – Vishal

+0

Исключение, которое я получаю, это ArgumentOutOfRange, и я использую datapager, потому что запрос возвращает несколько записей, и я проверю встроенный пейджинг и вернусь к вам. –

ответ

0

Определить сетку первого (вы можете изменить имя элемента управления для ListView, но реализация такой же)

<asp:GridView runat="server" ID="grdResult" 
        CellPadding="2" 
        OnPageIndexChanging="grdResult_PageIndexChanging" 
        GridLines="None" 
        Width="100%" 
        AllowSorting="True" 
        AllowPaging="True" 

Тогда в нижней части определить источник

<asp:SqlDataSource ID="sqlGridData" runat="server"></asp:SqlDataSource> 

данных в настоящее время в код загрузить контроль sqlGridData с данными (он принимает множество параметров, таких как DataTable, odbcrecordset вы можете использовать .provider собственности, упомянутые здесь http://tinyurl.com/bllyjsz), если у вас есть статические данные, их вы даже упоминать на время разработки (как это сделано здесь http://tinyurl.com/c8b6mbh)

private void BindDataGrid() 
    { 
     sqlGridData.Provider = dataReader; 
     grdResult.DataSourceID = "xmlGridData"; 
     //grdResult.PageIndex = 0; 
    } 

Попробуйте это и дайте мне знать, если у вас есть какие-либо запрос.

+0

Проблема заключается в ListView1.DataKeys [dataItem.DataItemIndex] ["ProductId"]. ToString(); // Идентификатор продукта для выбранной игры. string GameName = ListView1.DataKeys [dataItem.DataItemIndex] ["GameName"]. ToString(); // gamename Я не могу получить значения datakey :( –

+0

@TwinklingStar: Пожалуйста, разместите свой код здесь, и я постараюсь изучить его (вы можете отредактировать свой адрес orignal, чтобы добавить код), и просто попробуйте синтаксический анализ вместо кастинга (только для того, чтобы избежать проверки нулей): string GameName = (string) ListView1.DataKeys [dataItem.DataItemIndex] ["GameName"] или попробуйте convert.tostring(). – Vishal