伙计我试图通过C#windows窗体应用程序中的bindingnavigator在我的datagridview中实现分页。
我只是将datagridview和bindingnavigator从工具栏拖到窗体。使用数据集将Datagridview数据绑定到SQL Server中的数据库表。我已经为gridview添加了3个额外的按钮,这些按钮将执行一些功能。
现在我以前从未使用过bindingnavigator,所以我只选择了datagridview1的bindingsource来从其属性中获取bindingnavigator的数据源。
这是我的表单在运行时的样子:
目前,datagridview1显示我表中的所有记录(31,截至目前),绑定导航器的下一个按钮只是将我带到下一条记录(例如,从TicketID = 1到TicketID = 2)。
现在,我想做的是:
1。)Datagridview应该每页只显示10(或50)条记录,并且应该使用bindingnavigator控件在页面之间切换,以便UI保持响应,并且它变得更“内存效率”,因为最终我的数据库将具有成千上万的记录。
2.。)BindingNavigator的控件应该出现在窗体的中心,而不是左/右。我无法将其设置为属性中心。
我的表单背后的代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication2
{
public partial class Form9 : Form
{
public Form9()
{
InitializeComponent();
}
private void Form9_Load(object sender, EventArgs e)
{
this.CenterToScreen();
try
{
this.tblTicketDetailTableAdapter.Fill(this.sTDataSet4.tblTicketDetail);
}
catch
{
MessageBox.Show("Error : Cannot establish a valid connection to database.", "SQL SERVER ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
if (e.ColumnIndex == dataGridView1.Columns["Detail"].Index)
{
//some code
}
else if (e.ColumnIndex == dataGridView1.Columns["Close"].Index)
{
//some code
}
else if (e.ColumnIndex == dataGridView1.Columns["ViewDetail"].Index)
{
//some code
}
}
}
现在我该怎么做才能使bindingnavigator
作为分页控件工作?
答案 0 :(得分:5)
执行此操作的一种方法是将父表分解为DataTables列表(或我的首选项BindingList<DataTable>
),然后根据导航器控件的位置更改分配网格的DataSource:
BindingSource bs = new BindingSource();
BindingList<DataTable> tables = new BindingList<DataTable>();
protected override void OnLoad(EventArgs e) {
base.OnLoad(e);
int counter = 0;
DataTable dt = null;
foreach (DataRow dr in tblTicketDetail.Rows) {
if (counter == 0) {
dt = tblTicketDetail.Clone();
tables.Add(dt);
}
dt.Rows.Add(dr.ItemArray);
++counter;
if (counter > 9) {
counter = 0;
}
}
bindingNavigator1.BindingSource = bs;
bs.DataSource = tables;
bs.PositionChanged += bs_PositionChanged;
bs_PositionChanged(bs, EventArgs.Empty);
}
void bs_PositionChanged(object sender, EventArgs e) {
dataGridView1.DataSource = tables[bs.Position];
}
就BindingNavigator控件居中而言,只需将Dock样式设置为None,然后手动将控件置于中心位置。设置后,将Anchors设置为none,当容器调整大小时,ToolBar应该“浮动”在中心。