SuRaj Dedhia Ответов: 1

Индекс был вне зоны досягаемости. Должно быть неотрицательным и меньшим, чем размер коллекции при использовании 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

Да, точно. Я слышал это так много раз от людей, которые понятия не имеют, что такое отладчик или что он делает, что я больше не верю, когда кто-то говорит, что они отладили свой код. Если бы вы запустили свой код в отладчике и шагнули через код туда, где произошла ошибка, вы бы точно знали, на какой строке произошла ошибка и в чем проблема. И действительно хорошая новость для вас заключается в том, что мы не можем отладить ваш код для вас. У нас нет доступа к вашему коду или вашим данным, поэтому мы буквально ничего не можем сделать.

SuRaj Dedhia

Я определил проблему. В коде подкачки я пытался привязать listview из ViewState ("Data"), который создается onPageLoad, но когда pageIndex изменяется, viewstate становится пустым и выдает исключение. Поэтому я вызвал функцию PopulatePage, но все равно, когда pageIndex изменяется, он не получает идентификатор продукта на ItemDataBound, который все еще создает проблему. Можете ли вы сказать мне, как это можно решить?

SuRaj Dedhia

Наконец, внеся некоторые изменения в код ItemDataBound, вся моя проблема будет решена. Мне нужно знать, как я могу сбросить PageIndex? Потому что предположим, что если отобразить 18 продуктов на одной странице ,то у меня всего 100 страниц, и я перескочил на 10-ю страницу, а затем применил любой фильтр, то он все равно останется на 10-й странице. Так что если продукты меньше 18 после применения фильтра, то он будет отображать его на первой странице, но потому что я все еще на 10-й странице, поэтому я не вижу никаких продуктов, которые были найдены после применения фильтра. Надеюсь, теперь я смогу понять, в чем проблема.

1 Ответов

Рейтинг:
1

Patrice T

Сообщение об ошибке означает, что либо объект, к которому вы пытаетесь получить доступ, не является массивом, либо элемент не существует.

Используйте отладчик и убедитесь, что переменные содержат то, что вы ожидаете.
если линия сложная, разделите ее, чтобы увидеть, какая часть не работает.
Нота: try/catch предотвратите получение ошибки.


SuRaj Dedhia

Я определил проблему. В коде подкачки я пытался привязать listview из ViewState ("Data"), который создается onPageLoad, но когда pageIndex изменяется, viewstate становится пустым и выдает исключение. Поэтому я вызвал функцию PopulatePage, но все равно, когда pageIndex изменяется, он не получает идентификатор продукта на ItemDataBound, который все еще создает проблему. Можете ли вы сказать мне, как это можно решить?

SuRaj Dedhia

Наконец, внеся некоторые изменения в код ItemDataBound, вся моя проблема будет решена. Мне нужно знать, как я могу сбросить PageIndex? Потому что предположим, что если отобразить 18 продуктов на одной странице ,то у меня всего 100 страниц, и я перескочил на 10-ю страницу, а затем применил любой фильтр, то он все равно останется на 10-й странице. Так что если продукты меньше 18 после применения фильтра, то он будет отображать его на первой странице, но потому что я все еще на 10-й странице, поэтому я не вижу никаких продуктов, которые были найдены после применения фильтра. Надеюсь, теперь я смогу понять, в чем проблема.

Patrice T

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

SuRaj Dedhia

Привет. Я разместил здесь новый вопрос http://www.codeproject.com/Questions/1133946/Reset-pageindex-for-listview-after-applying-filter . Не могли бы вы помочь?

Patrice T

Я знал ответ на этот вопрос, но у меня нет опыта в решении новой проблемы.
Другой эксперт увидит новый вопрос.