C#——从 MySQL 检索数据并在没有 DataGridView 的“页面”中对它们进行排序

问题描述 投票:0回答:2

我是 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;
    }
 }

所以,我期待任何想法;

c# mysql winforms datagridview pagination
2个回答
1
投票

在单击按钮时,您会更新 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();
}

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


0
投票
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 方法,以便进行数据绑定。

© www.soinside.com 2019 - 2024. All rights reserved.