xTMx9 Ответов: 1

Как я могу двигаться вперед и назад по строкам таблицы данных?


У меня есть 4 кнопки (Next,Previous,First,Last), которые перемещаются по строкам datatable.
Кнопки первая и последняя работают правильно,но другие кнопки-нет(ничего не происходит, если я нажимаю их, они продолжают указывать на запись 1).
Когда я нажимаю последнюю кнопку, она переходит к последней записи,но когда я нажимаю следующую кнопку, она приводит меня к первой записи вместо того, чтобы сказать мне "больше никаких записей".
Это фотография моей формы: Форма
Это мой код ниже и код формы:

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

Imports Microsoft.VisualBasic
Imports System.Data.SqlClient
Imports System.Data

Partial Class P3
    Inherits System.Web.UI.Page
    Dim ds As New DataSet
    Dim inc As Integer
    Dim MaxRows As Integer
    Dim tbl As DataTable
    Private Sub NavigateRecords()
        Gidbx.Text = tbl.Rows(inc).Item(0)
        Gnamebx.Text = tbl.Rows(inc).Item(1)
    End Sub

    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
       
        Response.Write(Session("slctdGarage"))
        Dim strConnectionString As String
        Dim instsqlconnection As SqlConnection
        strConnectionString = "Integrated Security=SSPI;Initial Catalog=MySetOfGarages;Data Source=."
        instsqlconnection = New SqlConnection(strConnectionString)
        instsqlconnection.Open()
        Dim da As New SqlDataAdapter("Select * From Garage", instsqlconnection)
        da.Fill(ds, "Grg")
        tbl = ds.Tables("Grg")
        instsqlconnection.Close()
        MaxRows = tbl.Rows.Count
        inc = -1

      
    End Sub

    Protected Sub Nextrec_Click(sender As Object, e As EventArgs) Handles Nextrec.Click
        If inc <> MaxRows - 1 Then
            inc = inc + 1
            NavigateRecords()
        Else
            Response.Write("No More Rows")
        End If

    End Sub

    Protected Sub Previousrec_Click(sender As Object, e As EventArgs) Handles Previousrec.Click
        If inc > 0 Then
            inc = inc - 1
            NavigateRecords()
        ElseIf inc = -1 Then
            Response.Write("No Records Yet")
        ElseIf inc = 0 Then
            Response.Write("First Record")

        End If

    End Sub

    Protected Sub Lastrec_Click(sender As Object, e As EventArgs) Handles Lastrec.Click
        If inc <> MaxRows - 1 Then
            inc = MaxRows - 1
            NavigateRecords()
        End If

    End Sub

    Protected Sub Firstrec_Click(sender As Object, e As EventArgs) Handles Firstrec.Click
        If inc <> 0 Then
            inc = 0
            NavigateRecords()
        End If

    End Sub
End Class


<%@ Page Language="VB" AutoEventWireup="false" CodeFile="P3.aspx.vb" Inherits="P3" %>


<form id="form1" runat="server">
    <p>
         id Garage      
        <asp:TextBox ID="Gidbx" runat="server"></asp:TextBox>
         </p>
    <p>
         GarageName 
        <asp:TextBox ID="Gnamebx" runat="server"></asp:TextBox>
            
        <asp:Button ID="Firstrec" runat="server" Text="<<" />
 
        <asp:Button ID="Previousrec" runat="server" Text="<" />
 
        <asp:Button ID="Nextrec" runat="server" Text=">" />
 
        <asp:Button ID="Lastrec" runat="server" Text=">>" />
    </p>
    <p>
                         
        <asp:Button ID="Button1" runat="server" Text="Add Record" />
               
        <asp:Button ID="Button2" runat="server" Text="Update Rec" />
        
        <asp:Button ID="Button3" runat="server" Text="Delete Rec" />
    </p>
</form>

1 Ответов

Рейтинг:
1

Karthik_Mahalingam

обратитесь к моему предыдущему ответу на этот аналогичный вопрос, но он был написан на C#, попробуйте понять логику и реализовать ее в своем приложении

Код для первой следующей последней предыдущей кнопки и отображения данных на странице приложения windows C# [^]


используйте это для преобразования c# в VB CodeTranslator: перевод кода с c# на VB [^]


xTMx9

Ваш код очень похож на то,что я написал, но в любом случае я попробовал его, но все равно получил те же результаты.Работают только первая и последняя кнопки!
Я добавил больше деталей в вопрос.

Karthik_Mahalingam

О это веб приложение,
Я проверю и обновлю свой ответ.

xTMx9

я добавил больше деталей в вопрос, может быть, это поможет.
может быть, это что-то о том, что inc не увеличивается правильно?или он возвращается к -1 каждый раз, когда я нажимаю кнопку.

Karthik_Mahalingam

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

использование системы;
использование системы.Коллекции.Общий;
используя системы.Сведения;
используя системы.Данных.Поставщики sqlclient;
использование системы.ИО;
использование System. Linq;
использование System.Net;
используя системы.Веб.ИП;
используя системы.Веб.Пользовательского интерфейса.WebControls;

пространство имен WebApplication2
{
общественный разделяемого класса файл webform1 : система.Веб.Пользовательского интерфейса.Страницы
{
DataTable dt = новый DataTable();


индекс public int
{
get { return Convert.ToInt32(ViewState ["index"]); }
set { ViewState ["index"] = значение; }
}
public int Last
{
get { return Convert.ToInt32(ViewState ["последний"]); }
set { ViewState ["last"] = значение; }
}

protected void Page_Load(отправитель объекта, EventArgs e)
{
ДТ.Столбцы.Добавить("Имя");
ДТ.Столбцы.Добавить ("Фамилия");
ДТ.Строк.Добавить("Мото", "Нексус");
ДТ.Строк.Добавить("Яблоко", "Айфон");
ДТ.Строк.Добавить("Сони", "Вайо");
ДТ.Строк.Добавить("Samsung", "Край");

если (! страница.IsPostBack)
{
Индекс = 0;
Последний = ДТ.Строк.Количество-1;
PopulateData (Индекс);
}
}
охраняемых недействительными btnFirst_Click(объект отправителя, EventArgs в электронной)
{
Индекс = 0;
PopulateData (Индекс);
}
охраняемых недействительными btnLast_Click(объект отправителя, EventArgs в электронной)
{
PopulateData(Последний);
}
охраняемых недействительными btnPrev_Click(объект отправителя, EventArgs в электронной)
{
Индекс--;
Индекс = индекс < 0 ? 0: индекс;
PopulateData (Индекс);
}
охраняемых недействительными btnNext_Click(объект отправителя, EventArgs в электронной)
{
Индекс++;
Индекс = индекс > Последний ? Последнее: Индекс;
PopulateData (Индекс);
}

private void PopulateData(int index)
{
Подряд строкаданных = ДТ.Строки[индекс];
строка имя = строка["имя"].Метод toString();
string lastName = строка ["фамилия"].Метод toString();
txtFirstName.Текст = имя;
txtLastName.Текст = фамилия;

}
}
}







------------------


&ЛТ;форме ID="фур" атрибут runat="сервер"и GT;

&ЛТ;АСП:текстовое поле с ID="txtFirstName" атрибут runat="сервер"и GT;
&ЛТ;АСП:текстовое поле с ID="txtLastName" атрибут runat="сервер"и GT;
&ЛТ;АСП:кнопка ID="btnFirst" атрибут runat="сервер" текст="первая" функция onclick="btnFirst_Click" /&ГТ;
&ЛТ;АСП:кнопка ID="btnPrev" атрибут runat="сервер" текст="пред" функция onclick="btnPrev_Click" /&ГТ;
&ЛТ;АСП:кнопка ID="btnNext" атрибут runat="сервер" текст="далее" функция onclick="btnNext_Click" /&ГТ;
&ЛТ;АСП:кнопка ID="btnLast" атрибут runat="сервер" текст="последняя" функция onclick="btnLast_Click" /&ГТ;

< / форма>

xTMx9

Я добавил Это здесь(обратная связь):
instsqlconnection.Закрывать()
Если Не Пейдж.Тогда IsPostBack
MaxRows = ТБЛ.Строк.Рассчитывать
Инк = -1

Конец, Если

Но теперь следующая кнопка показывает мне 2-ю запись, а последняя кнопка выдает мне эту ошибку: в позиции -1 нет строки.

Размещение if not postback на всем коде PageLoad даст мне эту ошибку на всех кнопках: ссылка на объект не установлена на экземпляр объекта.

Karthik_Mahalingam

это означает, что вам придется заполнить datatable на каждом посту обратно. или сохраните таблицу в состоянии просмотра..

xTMx9

да, но как насчет ошибки, которую я получаю при размещении post back только для MaxRows = tbl. Rows?Рассчитывать
Инк = -1
почему это не работает?
в чем ошибка в моем коде в этом вопросе? я действительно не знаю, почему это происходит!

Karthik_Mahalingam

опубликуйте свой обновленный код, дайте мне его просмотреть и вернуться.