2013-10-29 50 views
0

大家好我有一個DataGridView,裏面是2列,FullNameVoteCount。我想刷新DataGridView,以查看數據庫中的更改。如何在不關閉表單或單擊任何按鈕的情況下刷新DatagridView?可能嗎?如何刷新新存儲的數據的datagridview?

這裏是我的代碼:

private void President() 
    { 
     sc.Open(); 
     cmd = new SqlCommand("SELECT (LastName + ', ' + FirstName + ' ' + MiddleName) as FullName,Vcount as VoteCount FROM TableVote WHERE Position='President'", sc); 

     try 
     { 
      _da = new SqlDataAdapter(); 
      _da.SelectCommand = cmd; 
      DataTable _dt = new DataTable(); 
      _da.Fill(_dt); 
      BindingSource bs = new BindingSource(); 
      bs.DataSource = _dt; 
      PresDG.DataSource = bs; 
      _da.Update(_dt); 

      PresDG.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; 
      PresDG.Columns["FullName"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; 
      PresDG.Columns["VoteCount"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter; 
      PresDG.Columns["VoteCount"].Width = (100); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      sc.Close(); 
     } 
    } 
+0

你可以在另一個線程中做到這一點,我猜測每隔幾分鐘左右就會觸發一些方法。 – Tafari

回答

1

我認爲你必須重新填寫完整的DataGridView。

方式:

  1. 您使用Microsoft蜱類做到這一點,在給定的時間間隔
  2. 您使用Microsoft蜱類用於檢查數據庫中的變化。如果有一些更改,請重新填寫完整的DataGridView。
+0

得到了這個主意,非常感謝我的投票系統哈哈我:) –

0

您的數據庫是否經常更新?如果是這樣,您可以使用定時器進行定期更新。

0

您可以使用Sql服務器CLR集成。 Here Here

我會更詳細一點閱讀後張貼在,但是我希望它可以給你到那一個方向,或者你會發現你的解決方案。

UPDATE 您可以創建一個觸發應用程序,並使用該應用程序觸發打電話給你的方法結合GridView的。 Here是編寫觸發器並實現它的一個很好的例子。

CLR SP

0

有兩種情況:

  • 如果刷新你頻繁的DataGridView,你設置一個計時器,以 更新的結果。
  • 如果在插入或更新操作後刷新,則在 操作結束時回顧您的綁定方法。
0

使用一個計時器,併爲此

string connectionString = "SERVER=" + server + ";" + "DATABASE=" + 
database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";"; 

MySqlConnection conn = new MySqlConnection(connectionString); 
MySqlDataAdapter adptr = new MySqlDataAdapter("Select * FROM " + tableName, conn); 
DataTable tabloSql = new DataTable(); 
adptr.Fill(tabloSql); 
dataGridView1.DataSource = tabloSql; 

注:這樣做,如果你的程序沒有對您的DataTable的變化。 如果在刷新表格時對數據表進行更改,則數據表上的更改將被刪除

1

當您想要刷新數據時調用此函數。

YourGrid.DataSource = Refresh("SELECT..."); 

private BindingSource Refresh(string sql) 
{ 
    try 
    { 
     using (var da = new SqlDataAdapter(sql, new SqlConnection(Properties.Settings.Default.ConnectionString)) { FillLoadOption = LoadOption.Upsert }) 
     { 
      da.SelectCommand.Connection.Open(); 
      da.Fill(dataSet.YourTable); 
     } 
    } 
    catch(Exception ex) { MessageBox.Show(ex.Message); } 

    return new BindingSource(dataSet, "YourTable"); 
}