请,我正在使用vb.net 2015,并且DataGridview
绑定到DataTable
,数据可以毫无问题地获取。
现在,如果返回的记录超过200,我想一次检索200,那么我将在DataGridView
表单上设置下一个按钮,点击该按钮将加载DataGridView
剩下的记录。
假设有一千条记录,第一次加载网格时,它将有200条记录,下一个按钮将被点击以显示另外200条记录等。
下面是绑定DataGridView的代码,但我不知道如何进行导航。
Dim table As New DataTable
Dim com As SqlCommand
Dim QueryMailRefNo = "Select * from File_Movement where File_No=@File_No Order by fdate desc, ftime desc"
com = New SqlCommand(QueryMailRefNo, SQLCon)
com.Parameters.AddWithValue("File_No", frmHome.txtFileNo.Text)
daAdapter = New SqlDataAdapter(com)
daAdapter.Fill(table)
If table.Rows.Count > 200 Then
frmHome.dgvTracking.AutoGenerateColumns = False
frmHome.dgvTracking.DataSource = table
End If
Private Sub btnNext_Click(sender As Object, e As EventArgs) Handles btnNext.Click
End Sub
答案 0 :(得分:1)
您描述它的方式 - 以200个为单位显示行 - 并没有真正保存任何内容,因为所有行仍然加载到DataTable
。但是这可以使用DataView
来完成,这样您就不必为每个组或页面集重新查询数据库。
' some form level variables:
Private page As Int32
Private pageSize As Int32
Private myView As DataView
然后,当您最初构建DataTable时:
...
daAdapter.Fill(table)
page = 0
pageSize = 200
myView = New DataView(dtSample.AsEnumerable().
Skip(page * pageSize).
Take(pageSize).CopyToDataTable())
dgv1.DataSource = myView
' any UI description:
lblRows.Text = String.Format("Rows {0} - {1} of {2}",
((page * pageSize) + 1),
(page + 1 * pageSize),
dtSample.Rows.Count)
然后,当您点击page
或DataView
按钮时,您需要递增或递减Next
并重建Previous
:
page += 1
dvSample = New DataView(dtSample.AsEnumerable().
Skip(page * pageSize).
Take(pageSize).
CopyToDataTable())
dgv1.DataSource = dvSample
lblRows.Text = String.Format("Rows {0:#,###} - {1:#,###} of {2}",
((page * pageSize) + 1),
((page + 1) * pageSize),
dtSample.Rows.Count)
只有加载行的200套更经济,更容易。
答案 1 :(得分:0)
我没有VB.Net的经验。 所以,你可以阅读C#代码。
此示例构建如下:
您的计划将举办以下活动:
Load += Form1_Load;
nudNumber.ValueChanged+=nudNumber_ValueChanged;
cboPage.SelectedIndexChanged+=cboPage_SelectedIndexChanged;
要执行此操作的所有变量:
int currentPageIndex = 1;
int pageSize = 20;
int pageNumber = 0;
int fistRow, lastRow;
int rows;
SqlConnection QueryMailRefNo = new SqlConnection("Select * from File_Movement where File_No=@File_No Order by fdate desc, ftime desc");
Form_Load():
时的事件void Form1_Load(object sender, EventArgs e)
{
string sql = "select count(*) as MaxNumber from File_Movement";
SqlCommand cmd = new SqlCommand(sql, QueryMailRefNo);
QueryMailRefNo.Open();
rows = Convert.ToInt32(cmd.ExecuteScalar());
pageTotal();
QueryMailRefNo.Close();
}
计算所有页面的功能。
void pageTotal()
{
pageNumber = rows % pageSize != 0 ? rows / pageSize + 1 : rows / pageSize; // Count page if have pageSize in Page
lblTotal.Text = " / " + pageNumber.ToString();
cboPage.Items.Clear();
for (int i = 1; i < pageNumber; i++)
cboPage.Items.Add(i + "");
cboPage.SelectedIndex = 0;
}
接下来,在页面数据中默认更改数字行时的事件:
private void nudNumber_ValueChanged(object sender, EventArgs e)
{
pageSize = Convert.ToInt32(nudNumber.Value);
pageTotal();
}
最后,当你在整个页面中选择任何页面时,事件。
void cboPage_SelectedIndexChanged(object sender, EventArgs e)
{
currentPageIndex = Convert.ToInt32(cboPage.Text);
fistRow = pageSize * (currentPageIndex - 1); // First rows
lastRow = pageSize * (currentPageIndex); //Final rows of page selected
string sql = "select Row_number() over(order by fdate) * from File_Movement";
SqlDataAdapter da = new SqlDataAdapter(sql, QueryMailRefNo);
DataSet ds = new DataSet();
da.Fill(ds, fistRow, pageSize, "ITSVT"); //Get data from firstRow and get pageSizeLấy of rows
dataGridView1.DataSource = ds.Tables[0];
}
希望如此帮助你。