Sree_Ranga Ответов: 1

У меня есть динамический gridview с подкачкой страниц. Я хочу загрузить данные на основе индекса страницы.


У меня есть gridview, в котором текстовые поля и выпадающие списки будут генерироваться динамически.

Если у меня есть 10000 записей, то он загружает 10000 записей. Но я этого не хочу.
Мне нужно получить записи, основанные на индексе страницы. Если бы я был на странице 1, он должен был бы получить и загрузить данные от 1 до 50 записей, а если бы я был на странице 3, он должен был бы получить и загрузить от 100 до 150 таких данных.

Как я могу этого достичь? Пожалуйста, предложите.

Что я уже пробовал:

Это вид сетки, который я определил, и я установил свойство allo paging true.

<asp:GridView ID="gvDUSrqst" runat="server" AutoGenerateColumns="False" OnRowDataBound="OnRowDataBound"
                GridLines="Vertical" BorderColor="White" AllowPaging = "true" PageSize="50">
                <HeaderStyle BackColor="#009530" CssClass="lblClsGridHdr" HorizontalAlign="Center" />
                <RowStyle Font-Names="Arial" Font-Size="8pt" ForeColor="#009530" />
            </asp:GridView>


Это код изменения индекса моей страницы.

Protected Sub OnPageIndexChanging(ByVal sender As Object, ByVal e As GridViewPageEventArgs) Handles gvDUSrqst.PageIndexChanging
        gvDUSrqst.PageIndex = e.NewPageIndex
        btnSaveDUS_Click(btnSaveDUS, e)
        Me.BindGrid()
    End Sub


Это метод биндгрида.

Private Sub BindGrid()
        Dim dt As New DataTable()
        Dim i As Integer = 0
        Dim fld As String = ""
        Sql = "SELECT FIELD,CASE WHEN FIELD='MATNR' THEN 'X' WHEN TASK_CODE='" & lblTsk.Text & "' THEN 'Y' ELSE 'Z' END FROM TABLE1 where ETCODE=" & "'" & lbletcode.Text & "'" & " AND TECODE=" & "'" & lbltecode.Text & "'" & "  ORDER BY 2,TASK_CODE,SEQ"
        Using OracleConnect As New OracleConnection(OraConString)
            OracleConnect.Open()
            dt = New DataTable()
            cmdOra = New OracleCommand(Sql, OracleConnect)
            rdrOra = cmdOra.ExecuteReader
            dt.Load(rdrOra)
            For i = 0 To dt.Rows.Count - 1
                If i = 0 Then
                    fld = dt.Rows(0).Item(0)
                Else
                    fld = fld & "," & dt.Rows(i).Item(0)
                End If
            Next
            dt.Dispose()
            Sql = "SELECT " & fld & " FROM TABLE2 WHERE WFCODE='" & lblWFCode.Text & "'"
            'Sql = "SELECT * FROM (SELECT " & fld & ", ROWNUM R FROM " & ViewState("TABLE_NAME") & " WHERE WFCODE='" & lblWFCode.Text & "') where r>" & ViewState("pageindex") & " and r<" & ViewState("pageindex") + 51 & ""
            dt = New DataTable
            cmdOra = New OracleCommand(Sql, OracleConnect)
            rdrOra = cmdOra.ExecuteReader
            dt.Load(rdrOra)
            If dt.Rows.Count > 0 Then
                gvDUSrqst.DataSource = dt
                gvDUSrqst.DataBind()
            End If
            OracleConnect.Close()
        End Using
    End Sub

1 Ответов

Рейтинг:
2

Patrice T

Sql = "SELECT FIELD,CASE WHEN FIELD='MATNR' THEN 'X' WHEN TASK_CODE='" & lblTsk.Text & "' THEN 'Y' ELSE 'Z' END FROM TABLE1 where ETCODE=" & "'" & lbletcode.Text & "'" & " AND TECODE=" & "'" & lbltecode.Text & "'" & "  ORDER BY 2,TASK_CODE,SEQ"

Не решение вашего вопроса, а еще одна проблема, которая у вас есть.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]


Sree_Ranga

Спасибо за предоставленную информацию. Я получил решение, достигните моего решения.
Я использую две кнопки вместо подкачки. при нажатии кнопки event я загружаю данные.