2016-12-26 4 views
0

私は、特定の時間ごとにdatagridviewにプログラム的にいくつかの行を追加しています。私はdatagridviewで、オンラインの場合、特定の時間にリポジトリにコミットがどれくらいあるかなど、特定のgithubリポジトリの状態を表示したいと思います。DataGridView.Rows.Clear()とは何ですか?

したがって、タイムアウトが発生すると、DataGridView .Rows.Clear()を呼び出し、更新された情報をリポジトリに追加します。

私のコードはここにある:

Dim ok As Integer = 0 
    DataGridView1.Rows.Clear() 
    For Each r As RepoURL In _impControllerBpi.GetReposApi 
     DataGridView1.Rows.Add(DateTimeOffset.Now, "https://github.com/" + r.GetUsr + "/" + r.GetNomRep, "-", "-", "-") 
    Next 
    Dim counter = 1 
    For Each r As RepoURL In _impControllerBpi.GetReposApi 
     DataGridView1.Rows.Item(counter - 1).Cells.Item(0).Value = DateTimeOffset.Now 
     DataGridView1.Rows.Item(counter - 1).Cells.Item(2).Value = "Conectando con GitHub" 
     ok = Await _impController.getRepoGitHub(r, counter) 
     If ok = 1 Then 
      DataGridView1.Rows.Item(counter - 1).Cells.Item(0).Value = DateTimeOffset.Now 
      DataGridView1.Rows.Item(counter - 1).Cells.Item(2).Value = "Conectado" 
     Else 
      DataGridView1.Rows.Item(counter - 1).Cells.Item(0).Value = DateTimeOffset.Now 
      DataGridView1.Rows.Item(counter - 1).Cells.Item(2).Value = "Repositorio no disponible en GitHub" 
     End If 
     counter = counter + 1 
    Next 

    Dim wreturnCode As Integer = System.Threading.ThreadPool.QueueUserWorkItem(New System.Threading.WaitCallback(AddressOf RepeatAction), cancellation.Token) 

    ok = 0 

すべてがClear()せずに正常に動作します。私はいくつかの反復で、行をクリアしたときに、私は最初の行を追加する場合でも、システムは私は

System.NullReferenceException

いくつかの助けスロー? Clear()は、行のコレクションに割り当てられたメモリを解放しますか?

+0

「F1」(強くお勧めします)を押すと、コレクションがクリアされるという驚くべきことが明らかになります。コレクションをクリアすると、行オブジェクトはありません – Plutonix

+0

はい、すべての行オブジェクトをクリアしてrows.Butを追加すると、システムがNull参照例外をスローすることがあります – lsalvatore

+0

最も重要なことの2つ**常に**エラーについての質問をするときに教えてください:** 1)**どのような正確な行に例外がスローされますか? ** 2)**エラーメッセージは何ですか? –

答えて

0

DataGridViewコントロールのデータを本当に消去したい場合は、シリアルの方法があります。

1. forループを使用して行データを1つずつクリアします。

for (int i = 0; i < dataGridView1.RowCount; i++) 
     { 
      dataGridView1.Rows.Remove(dataGridView1.Rows[0]); 

     } 

2. DataSourceプロパティを直接NULLに設定します。

DataGridView.DataSource=null; 

DataSetをこのコントロールにバインドする場合は、まずDataSetをNULLに設定することをお勧めします。

DataSet DataSet1=new DataSet(); 
DataSet1.clear(); 

3.Aboveの方法は、内部の指定されたDataSet内のすべての表を削除することができるので、あなたはより良い個別にその表を削除すると思います。

DataSet ds = new DataSet(); 

DataTable dt = new DataTable(); 

dt.Columns.Add("val", typeof(int)); 

dt.Columns.Add("name", typeof(string)); 

dt.Rows.Add(1, "good"); 

ds.Tables.Add(dt); 

dt.TableName = "test"; 

dataGridView1.DataSource = ds.Tables[0]; 

したがって、次のコードを使用して指定されたテーブルをクリアすることができます。

ds.Tables[0].Clear(); 
+0

これはC#コードですが、質問にはVB.NETというタグが付けられています。正しい言語に変換/書き換えてください。 –

+1

それは99%の.Netコードです - 誰かが答えに努力したことに感謝します。 – rheitzman

+0

申し訳ありませんが、私は行を削除すると、まだいくつかの瞬間にNullReferenceExceptionをスロー、オブジェクトはnullです。奇妙ですが、時には削除とクリアをうまく​​動作します。他の時間はありません.. – lsalvatore

関連する問題