我想为 UserControl 制作页面,但我不知道如何做到这一点。
如何在 WinForms 中实现如图所示的功能?
我想在页面上显示过滤器中指示的尽可能多的卡片,但我不知道如何将剩余的卡片转移到下一页:
我的代码
private void button1_Click(object sender, EventArgs e)
{
flowLayout.Controls.Clear();
MySqlConnection sqlConnection = new MySqlConnection(connectionString);
sqlConnection.Open();
MySqlCommand cmd = new MySqlCommand(query, sqlConnection);
try
{
using (MySqlDataAdapter sda = new MySqlDataAdapter(cmd))
{
DataTable dt = new DataTable();
sda.Fill(dt);
if (dt != null)
{
if (dt.Rows.Count > 0)
{
ShopItem[] listItems = new ShopItem[dt.Rows.Count];
for (int i = 0; i < 1; i++)
{
foreach (DataRow row in dt.Rows)
{
listItems[i] = new ShopItem();
listItems[i].id = Convert.ToInt32(row["id_order"]);
listItems[i].brand = row["brand"].ToString();
listItems[i].capacity = row["capacity"].ToString();
listItems[i].engine = row["engine"].ToString();
listItems[i].lifting_height = row["lifting_height"].ToString();
listItems[i].mass = row["mass"].ToString();
MemoryStream ms = new MemoryStream((byte[])row["image"]);
Bitmap bitmap = new Bitmap(ms);
listItems[i]._image = bitmap;
listItems[i].price = row["price"].ToString();
//if select first value display one item
if (comboBoxFilter.SelectedIndex == 0)
{
if(flowLayout.Controls.Count < Convert.ToInt32(comboBoxFilter.SelectedItem))
{
flowLayout.Controls.Add(listItems[i]);
}
}
//if select second value display four item
if (comboBoxFilter.SelectedIndex == 1)
{
if (flowLayout.Controls.Count < Convert.ToInt32(comboBoxFilter.SelectedItem))
{
flowLayout.Controls.Add(listItems[i]);
}
}
//if select third value display nine item
if (comboBoxFilter.SelectedIndex == 2)
{
if (flowLayout.Controls.Count < Convert.ToInt32(comboBoxFilter.SelectedItem))
{
flowLayout.Controls.Add(listItems[i]);
}
}
}
}
假设您有一个
pageSize
和一个 page
值,您可以从 Rows
获取相应的块,如下所示:
for (int myIndex = page * pageSize; myIndex < (page + 1) * pageSize; myIndex++) {
//Do some stuff with dt.Rows[i]
}
但是,最好不要从数据库中获取所有行,您可以将
query
修改为 limit
您的结果,您可以在任何 RDBMS 中执行此操作,但语法有所不同。如果您甚至无法从数据库中获取所有行,那么您可以像最初那样使用 row
循环,因为分页已经由查询完成。但是,如果您确实想在应用程序服务器上应用分页逻辑,正如您的问题标签所建议的那样,那么您可以按照上面的建议进行循环。
一般来说,最好限制 RDBMS 端的结果,这样您就不必在每个请求时用 n * 页行填充内存,而只需要 n x 少的行。因此,如果您没有充分的理由加载所有行,请在查询中进行限制。如果您有大数据,这尤其有用。