Индекс был вне зоны досягаемости. Должно быть неотрицательным и меньшим, чем размер коллекции при использовании itemdatabound для элемента управления ListView
Я сильно влип в это дело. Индекс был вне зоны досягаемости. Должно быть неотрицательным и меньше размера коллекции. Живая ссылка на сайт www.brandstik.in/products/ready-stock. Здесь на одной странице Я показываю 36 продуктов. Когда я перехожу на следующую страницу, она показывает страницу исключения. Я попытался удалить свой код ItemDataBound, но он работает нормально. Так есть ли какие-то проблемы с моим кодом?
Что я уже пробовал:
OnPageLoad
Private Sub populatePage() Try query = "SELECT * FROM products where stock_status = @stock_status and status = @status" Dim conString As String = ConfigurationManager.ConnectionStrings("conio").ConnectionString Dim con As New MySqlConnection(conString) Dim cmd As New MySqlCommand(query) cmd.Parameters.AddWithValue("@stock_status", "Ready Stock") cmd.Parameters.AddWithValue("@status", "active") con.Open() Dim da As New MySqlDataAdapter() cmd.Connection = con da.SelectCommand = cmd Dim dt As New DataTable() da.Fill(dt) ViewState("Data") = dt products.DataSource = dt products.DataBind() catHeading.Text = "Products In Ready Stock" itemCount.Text = dt.Rows.Count.ToString catSliderHeader.Text = "Categories" Page.Title = "Ready Stock Products" + " | BrandSTIK" con.Close() Catch ex As Exception Response.Write(ex) End Try End Sub
Private Sub products_ItemDataBound(sender As Object, e As ListViewItemEventArgs) Handles products.ItemDataBound Try If e.Item.ItemType = ListViewItemType.DataItem Then Dim itm As ListViewDataItem = CType(e.Item, ListViewDataItem) Dim productID As String = products.DataKeys(itm.DataItemIndex)("ID").ToString() query = "SELECT stock_status FROM products WHERE ID = '" + productID + "'" Dim dt As DataTable = Me.GetData(query) If dt.Rows.Count > 0 Then CType(e.Item.FindControl("checkReadyStock"), Label).Text = dt.Rows(0)("stock_status").ToString If CType(e.Item.FindControl("checkReadyStock"), Label).Text = "Ready Stock" Then CType(e.Item.FindControl("readyStock"), Image).Visible = True End If End If End If Catch ex As Exception Response.Write(ex) End Try End Sub
ItemDataBound я использовал для отображения Красного изображения (в готовом складе), потому что когда значение столбца ready stock равно yes для конкретного продукта, то отображается только это изображение.
Protected Sub OnPagePropertiesChanging(sender As Object, e As PagePropertiesChangingEventArgs) TryCast(products.FindControl("DataPager1"), DataPager).SetPageProperties(e.StartRowIndex, e.MaximumRows, False) products.DataSource = ViewState("Data") products.DataBind() End Sub
F-ES Sitecore
Ваш код не имеет смысла. Это так VB.net код в формате c#, я даже не вижу, как он компилируется?
Karthik_Mahalingam
Всегда использовать Ответить кнопка, чтобы отправить комментарии / запрос пользователю, чтобы пользователь получил уведомление и ответил на ваш текст.
SuRaj Dedhia
Да я должен преобразовать его из vb.net к c#, потому что c# получает больше видимости, чем vb.net. В любом случае я обновился VB.net код . Не могли бы вы помочь?
Karthik_Mahalingam
в какой строке
F-ES Sitecore
Было бы полезно, если бы вы могли хотя бы сказать, на какой линии происходит ошибка.
SuRaj Dedhia
Здесь я не совсем понимаю линию ошибки. Это ссылка на то, откуда приходит ошибка. www.brandstik.in/products/ready-stock он будет загружаться правильно, но когда мы получим вторую страницу, она покажет все исключения
SuRaj Dedhia
Я не уверен, на какой именно линии идет ошибка. Но когда я использую ItemDataBound как описано выше в моем коде то только он показывает кучу исключений так что я думаю проблема где то в событии itemdatabound
Karthik_Mahalingam
попробуйте выполнить отладку в visual studio и проверьте, где возникает ошибка.
Tadit Dash (ତଡିତ୍ କୁମାର ଦାଶ)
Опубликуйте код события PageLoad.
F-ES Sitecore
Вам нужно научиться пользоваться отладчиком,вы не можете решать проблемы, глядя на код и угадывая. Поставить точки останова в коде на itemdatabound событие и шаг, хотя это
http://www.codeproject.com/Articles/79508/Mastering-Debugging-in-Visual-Studio-A-Beginn
NotPolitcallyCorrect
"Так есть ли какие-то проблемы с моим кодом?", да, очевидно, есть проблема с вашим кодом. Узнайте, как отлаживать свой код. Сообщения об ошибках, скорее всего, говорят вам точно, где находится проблема. Это исключение довольно легко найти и исправить.
SuRaj Dedhia
Я отладил код, но не смог найти точную проблему.
NotPolitcallyCorrect
Да, точно. Я слышал это так много раз от людей, которые понятия не имеют, что такое отладчик или что он делает, что я больше не верю, когда кто-то говорит, что они отладили свой код. Если бы вы запустили свой код в отладчике и шагнули через код туда, где произошла ошибка, вы бы точно знали, на какой строке произошла ошибка и в чем проблема. И действительно хорошая новость для вас заключается в том, что мы не можем отладить ваш код для вас. У нас нет доступа к вашему коду или вашим данным, поэтому мы буквально ничего не можем сделать.
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]
SuRaj Dedhia
Я определил проблему. В коде подкачки я пытался привязать listview из ViewState ("Data"), который создается onPageLoad, но когда pageIndex изменяется, viewstate становится пустым и выдает исключение. Поэтому я вызвал функцию PopulatePage, но все равно, когда pageIndex изменяется, он не получает идентификатор продукта на ItemDataBound, который все еще создает проблему. Можете ли вы сказать мне, как это можно решить?
SuRaj Dedhia
Наконец, внеся некоторые изменения в код ItemDataBound, вся моя проблема будет решена. Мне нужно знать, как я могу сбросить PageIndex? Потому что предположим, что если отобразить 18 продуктов на одной странице ,то у меня всего 100 страниц, и я перескочил на 10-ю страницу, а затем применил любой фильтр, то он все равно останется на 10-й странице. Так что если продукты меньше 18 после применения фильтра, то он будет отображать его на первой странице, но потому что я все еще на 10-й странице, поэтому я не вижу никаких продуктов, которые были найдены после применения фильтра. Надеюсь, теперь я смогу понять, в чем проблема.