Я посмотрел в сети и не смог найти подходящего решения для этого.
Я создал простое веб-приложение .net, которое считывает данные из локальной базы данных Access. Соединение работает, когда оно читает первую строку и заполняет текстовые поля.
Когда я нажимаю кнопку, она читает и заполняет вторую строку, но затем перестает работать и не читает следующую строку данных. Я не получаю никаких ошибок или проблем со сборкой. Кнопка просто перестает работать! Что-то в обработчике событий мне не хватает?
Решено с помощью IsPostBack
, чтобы увидеть, была ли страница загружена ранее, и ViewState для сохранения значения позиции при нажатии кнопки / перезагрузке страницы.
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication6._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server" ontextchanged="TextBox1_TextChanged"></asp:TextBox>
<br />
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
<br />
<asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" EnableClientScript="False"/>
<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</div>
</form>
</body>
</html>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.OleDb;
namespace WebApplication6
{
public partial class _Default : System.Web.UI.Page
{
private OleDbConnection connection;
private OleDbCommand command;
private OleDbDataAdapter adapter;
private DataSet dataset;
private string firstname;
private string lastname;
private int age;
private int position;
protected void Page_Load(object sender, EventArgs e)
{
connection = new OleDbConnection();
command = new OleDbCommand();
adapter = new OleDbDataAdapter();
dataset = new DataSet();
connection.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\People.mdb;Persist Security Info=False";
command.Connection = connection;
command.CommandText = "SELECT * FROM Table1";
adapter.SelectCommand = command;
adapter.Fill(dataset, "Table1");
ShowValuesOfRow(0);
}
private void ShowValuesOfRow(int pos)
{
DataRow row = dataset.Tables["Table1"].Rows[pos];
position = pos;
firstname = row["FirstName"].ToString();
lastname = row["LastName"].ToString();
age = (int)row["Age"];
TextBox1.Text = firstname;
TextBox2.Text = lastname;
TextBox3.Text = age.ToString();
}
protected void Button1_Click(object sender, EventArgs e)
{
int lastIndex = dataset.Tables["Table1"].Rows.Count - 1;
if (position < lastIndex)
{
position++;
ShowValuesOfRow(position);
}
}
}
}