C#——从 MySQL 检索数据并在 "pages"中对它们进行排序,而不使用 DataGridView

标签 c# mysql winforms datagridview paging

我是 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 事件中设置初始 xy 值并加载数据:

private void Form1_Load(object sender, EventArgs e)
{
    x = 0;
    y = 20;
    LoadData();
}

这应该加载数据的初始“页面”。那么想必您有一个用于分页的“下一页”和“上一页”按钮?每个都会相应地增加/减少xy 值。像这样的事情:

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();
}

更进一步,您需要添加一些边界检查,以便人们无法单击最后一页上的“下一页”或第一页上的“上一页”。也许一些错误处理是个好主意。有很多方法可以完善这一点。但基本思想是需要重新查询数据库并重新将表单控件与每个页面绑定(bind)。

关于C#——从 MySQL 检索数据并在 "pages"中对它们进行排序,而不使用 DataGridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32187039/

相关文章:

c# - 持久图形 WinForms

C# WinForms DataBindings 在通过控件进行 Tab 键时不起作用

C#/Unity3d - 将对象类型作为参数传递

c# - 你如何编译C#?

php - 是否可以在将结果分组在一起之后将它们分组在一起?

MySQL:相交匹配一定数量特征的行

c# - 在for循环中获取当前值

c# - HttpClient 发布到 ApacheServer (Debian)

c# - 使用c#在MSChart中显示系列的具体方法

mysql - 使用 Aulux Barcode 软件连接到 MySQL 数据库