2010-11-01 32 views
0

我有一個數據表,我必將以編程方式dataGridview1dataGridview1.refresh不起作用

public Form1() 
    { 
     InitializeComponent(); 
     dataTable = new DataTable();    
     dataTable.Columns.Add("name"); 

     this.dataGridView1.DataSource = dataTable; 

然後在一些事件處理程序,我DataTable中添加新行做一個不起作用的刷新:網格保持空白!

 DataRow dataRow = dataTable.NewRow(); 
     dataRow["name"] = "John"; 

     dataGridView1.Refresh(); 

我讀到這裏http://objectmix.com/dotnet/92001-datagridview-doesnt-refresh.html使用RaiseListChangedEvents,但我看不出,因爲我沒有BindingSource的,據我可以看到。

我是否有義務使用另一個控件BindingSource來完成那些非常基本的功能?然後,GridView的Refresh方法有什麼用?

注:我可以添加到一個簡單的列表沒有問題。

更新:對於上下文,我捕獲剪貼板中的文本(該部分沒有問題),並將其放入網格中。我曾嘗試invoke方法的建議,但它仍然不能正常工作:

public partial class Form1 : Form 
{ 
    public delegate void DelRefresh(); 


    private ClipboardSpy cps; 
    private DataTable dataTable; 

    public override void Refresh() 
    { 
     dataGridView1.DataSource = dataTable; 
    } 

    public Main() 
    { 
     InitializeComponent(); 

     cps = new ClipboardSpy(this); 
     cps.ClipboardChanged += new EventHandler(cps_ClipboardChanged); 

     dataTable = new DataTable();    
     dataTable.Columns.Add("Url"); 

     this.dataGridView1.DataSource = dataTable; 


    } 

    void cps_ClipboardChanged(object sender, EventArgs e) 
    { 
     String clipboardText = cps.GetClipboardData(); 
     DataRow dataRow = dataTable.NewRow(); 
     dataRow["Url"] = clipboardText; 


     dataGridView1.Invoke(new DelRefresh(Refresh)); 


     //listBox1.Items.Add(string.Format("{0:HH:mm:ss} " + clipboardText, DateTime.Now)); 
     //listBox1.SelectedIndex = listBox1.Items.Count - 1; 
    } 

}

+0

在接受的帖子上閱讀我的問題? – 2010-11-01 18:54:39

回答

1

UPDATE

您NEET設置name屬性之後添加

datatTable.add(dataRow); 

或該行不會添加到表中。

NewRow只創建一個匹配表的行對象,它不會將它添加到表中。

+0

我不使用BindingSource控件作爲我的gridview的數據源。 RaiseListChangeEvents是BindingSource的一個支柱。爲什麼刷新不能按預期工作? – user310291 2010-11-01 15:14:38

+0

檢查更新的文本,應該解決您的問題。 – 2010-11-01 15:30:25

0

嘗試

而不是

dataGridView1.Refresh(); 

嘗試

dataGridView1.DataSource = dataTable 
+0

不,它不起作用 – user310291 2010-11-01 15:13:44

1

實際上,因爲數據表綁定到你的datagridview,到DataTable的所有改變應該在DataGridView立即出現。

什麼可能是你的視圖沒有更新的原因是你在與UI線程不同的線程中對數據表進行更改。

你需要做的是,打電話給像

dataGridView1.Invoke(new DelRefresh(Refresh)); 

public delegate void DelRefresh(); 

public void Refresh() 
{ 
     dataGridView1.DataSource = dataTable 
} 

應該使其工作。

+0

你好是一個好主意,所以我試着用完整的上下文(抓取剪貼板文本)看到我的更新後的源代碼。但仍然不起作用。 – user310291 2010-11-01 16:03:17

+0

愚蠢的是,這是由於我使用Newrow的事實,但沒有將數據行添加到數據表中,但是如果我需要使用線程,那麼您的技巧將會非常有用,因此謝謝:) – user310291 2010-11-01 16:17:16

+0

爲什麼選擇此選項作爲我接受的答案在你的評論前一小時左右列出你錯過了我的帖子melow中的addrow;) – 2010-11-01 18:45:59