我是 C# 编程新手,我正在开始创建一个应用程序,该应用程序通过 ProgressBars 显示(现实生活中)“事件”何时到期。 所有信息。有关这些事件的信息存储在数据库中;因此,打开与 my-sql 数据库的连接我可以检索所有事件。 问题是我不知道该数据库中存储了多少事件(因为一天可以有 20 个事件,另一天可以有其他 40 个事件)并且我的 Form1 无法根据事件数量调整自身大小。 所以,我需要制作一个页面系统来限制每个页面打印的事件。 在 Google 和此网站上搜索,我发现在 C# 中制作页面的最简单方法是使用 DataGridView,但我无法使用它,因为我需要 ProgressBars 才能查看事件何时到期。 所以,我想用MySQL的限制数据选择来解决这个问题:
SELECT * from EVENTS LIMIT x,y;
其中x和y是两个变量,它们根据几个按钮而变化;在按钮 1(第一页)上,x 和 y 将为 0 和 20,在按钮 2(第二页)上,x 和 y 将为 20,40,依此类推。
但这不起作用,因为每次刷新 Form1 时 x 和 y 都会重置。
这只是一段代码,旨在帮助您理解我的场景:
public partial class Form1 : Form
{
int x;
private void Form1_Load(object sender, EventArgs e)
{
server = "localhost";
database = "app";
uid = "root";
password = "root";
string connectionString;
connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
connection = new MySqlConnection(connectionString);
if (this.OpenConnection() == true)
{
string query = "SELECT * from EVENTS LIMIT"+ x +","+ y +";";
mySqlDataAdapter = new MySqlDataAdapter(query , connection);
...
...
}
}
private void button1_Click(object sender, EventArgs e)
{
x=0;
y=20;
}
private void button2_Click(object sender, EventArgs e)
{
x=20;
y=40;
}
}
所以,我期待任何想法;
在单击按钮时,您会更新 x 和 y 值,但您永远不会重新执行数据库查询或更新表单上的数据。 您需要获取下一个“页面”数据才能显示它。
首先,将数据库代码提取到方法中,而不是在
Load
事件中:
private void LoadData()
{
server = "localhost";
database = "app";
uid = "root";
password = "root";
string connectionString;
connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
connection = new MySqlConnection(connectionString);
if (this.OpenConnection() == true)
{
string query = "SELECT * from EVENTS LIMIT"+ x +","+ y +";";
mySqlDataAdapter = new MySqlDataAdapter(query , connection);
...
...
}
}
然后在
Load
事件中设置初始 x
和 y
值并加载数据:
private void Form1_Load(object sender, EventArgs e)
{
x = 0;
y = 20;
LoadData();
}
这应该加载数据的初始“页面”。 那么大概你有一个“下一个”和“上一个”按钮用于分页? 每个都会相应地增加/减少
x
和 y
值。 像这样的东西:
private void nextButton_Click(object sender, EventArgs e)
{
x += 20;
y += 20;
LoadData();
}
private void previousButton_Click(object sender, EventArgs e)
{
x -= 20;
y -= 20;
LoadData();
}
更进一步,您需要添加一些边界检查,以便人们无法单击最后一页上的“下一页”或第一页上的“上一页”。 也许一些错误处理是个好主意。 有很多方法可以完善这一点。 但基本思路是需要重新查询数据库,并重新将表单控件与每个页面绑定。
public partial class Form1 : Form
{
private void Form1_Load(object sender, EventArgs e)
{
LoadData(0,20);
}
public void LoadData(int x, int y)
{
server = "localhost";
database = "app";
uid = "root";
password = "root";
string connectionString;
connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";
connection = new MySqlConnection(connectionString);
if (this.OpenConnection() == true)
{
string query = "SELECT * from EVENTS LIMIT"+ x +","+ y +";";
mySqlDataAdapter = new MySqlDataAdapter(query , connection);
...
...
}
}
private void button1_Click(object sender, EventArgs e)
{
LoadData(0,20);
}
private void button2_Click(object sender, EventArgs e)
{
LoadData(20,40);
}
}
在每个按钮单击事件上调用 LoadData 方法,以便进行数据绑定。