对绑定到数据集的 DataGridView 进行分页
本文关键字:分页 DataGridView 绑定 数据集 | 更新日期: 2023-09-27 18:31:11
我有一个从包含 100 行或更多行的 XML 文件加载的数据集,但我一次只能在 DataGridView 中显示 15 行(要求)。没有用户交互;十秒计时器移动到接下来的十五行。
FileStream stream = new FileStream("file.xml", FileMode.Open);
ds.readXml(stream);
Stream.Close();
datagridview1.DataSource = ds.Tables[0];
ds.Tables[0].DefaultView.Sort = "start asc";
XML 文件
<?xml version="1.0" standalone="yes"?>
<Table>
<hours>
<Start>10:00 AM</Start>
</hours>
<hours>
<Start>11:00 AM</Start>
</hours>
<hours>
<Start>1:00 PM</Start>
</hours>
<hours>
<Start>2:00 PM</Start>
</hours>
</Table>
我认为您的解决方案可以使用简单的 LINQ 查询来解决,以每 15 秒显示一页包含 10 条记录的页面:
private void BindPageToGrid()
{
var dsPage = _ds.Tables[0].AsEnumerable()
.Skip(_nPage * PAGE_SIZE)
.Take(PAGE_SIZE)
.Select(x => x);
datagridview1.DataSource = dsPage.CopyToDataTable<DataRow>();
}
下面是使上述方法正常工作的其余代码:
假设这些变量位于窗体类中:
const int PAGE_SIZE = 15; // the number of total items per page
private DataSet _ds; // the XML data you read in
private int _nPage; // the current page to display
private int _maxPages; // the max number of pages there are
我会在你的XML中读取几乎相同的内容,但将不同的数据发送到你的DataGridView:
FileStream stream = new FileStream("file.xml", FileMode.Open);
_ds.ReadXml(stream);
stream.Close();
_ds.Tables[0].DefaultView.Sort = "start asc";
// determine how many pages we need to show the data
_maxPages = Convert.ToInt32(Math.Ceiling(
(double)_ds.Tables[0].Rows.Count / PAGE_SIZE));
// start on the first page
_nPage = 0;
// show a page of data in the grid
BindPageToGrid();
// increment to the next page, but rollover to first page when finished
_nPage = (_nPage + 1) % _maxPages;
// start the 10-second timer
timer1.Interval = (int)new TimeSpan(0, 0, 10).TotalMilliseconds;
timer1.Tick += timer1_Tick;
timer1.Start();
这是计时器滴答方法:
void timer1_Tick(object sender, EventArgs e)
{
timer1.Stop();
// show a page of data in the grid
BindPageToGrid();
// increment to the next page, but rollover to first page when finished
_nPage = (_nPage + 1) % _maxPages;
timer1.Start();
}