2014-02-20 34 views
7

夥計們我試圖通過C#窗體應用程序中的bindingnavigator在我的datagridview中實現分頁。BindingNavigator與DataGridView的尋呼功能?

我已經簡單地將datagridview和bindingnavigator從工具欄拖動到窗體中。 Datagridview使用數據集將數據綁定到SQL Server中的數據庫表。我已經添加了3個額外的按鈕,gridview將會做一些功能。

現在我從來沒有使用過綁定導航器,所以我剛剛從它的屬性中爲綁定導航器的數據源選擇了datagridview1的綁定源。

這是我的表單外觀在運行:

enter image description here

目前,datagridview1顯示所有記錄在我的表(31,截至目前),並結合導航下一個按鈕,只是帶我去下一個記錄(例如,從TicketID = 1到TicketID = 2)。現在

,我想要做的是:

1)的DataGridView應該只顯示10(或50)每頁記錄,BindingNavigator控件應該使用,使用戶界面保持響應頁面之間切換和它變得更「高效」,因爲我的數據庫最終會有數千條記錄。

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

檢查[這個]的答案(http://stackoverflow.com/questions/2825771/how-can-we-do-pagination-in-datagridview-in-winform) – Junaith

回答

5

一種方法是打破了父表到數據表的列表(或我的偏好,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,然後手動將控件定位在中心位置。一旦設置,將錨點設置爲無,並且當容器調整大小時,工具欄應該「浮動」在中心。