2017-06-21 22 views
0

DataGridViewで重複する値と空白行を削除します。 私はこれに次のコードを使用しています。DataGridViewエラーの削除

Private Sub dgwsil() 
    On Error Resume Next 
    For i2 As Integer = DataGridView1.RowCount - 1 To 0 Step -1 
    If Trim(DataGridView1.Rows(i2).Cells(0).Value.ToString()) = "" Then 
     DataGridView1.Rows.RemoveAt(i2) 
    End If 
    Next 

    Dim numberOfRows = DataGridView1.Rows.Count 
    Dim i As Integer = 0 
    While i < numberOfRows - 2 
    For ii As Integer = (numberOfRows - 1) To (i + 1) Step -1 
     If DataGridView1.Rows(i).Cells(0).Value.ToString() = DataGridView1.Rows(ii).Cells(0).Value.ToString() Then 
     DataGridView1.Rows.Remove(DataGridView1.Rows(ii)) 
     numberOfRows -= 1 
     End If 
    Next 
    i += 1 
    End While 
End Sub 

コードが正しく動作することがあります。

like in this photo

しかし、時には、それは誤り

like this

を与えるにはどうすればこの問題を解決することができますか?または、あなたが使用しているコードはありますか?

+0

[NullReferenceExceptionとは何ですか?また修正するにはどうすればいいですか?](https://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix -it) – Mark

+0

本当に助けには十分な情報はありませんが、セルの値の1つがnullで、その上に 'ToString'を呼び出そうとしていますか? – Mark

答えて

0

あなたはVBAの考え方でこの問題に遭遇しているようです。 VBAでは通常datagridviewを直接操作し、On Error Resume Next行を受け入れます。

VB.NETでは、これらのことをしたくないです。あなたのdatagridviewは情報の集合に束縛されるべきです。そのコレクションは、datatableまたはarray、または実際のコレクションの任意のタイプにすることができます。したがってループを使用してdatagridviewを直接操作するのではなく、バッキングコレクションをループするか、さらにはLINQコレクションをループして操作する必要があります。多くのチュートリアルがありますので、datatabledatagridviewにバインドする方法について、グーグルーグルーグしてください。

Try...Catch...Finally...の構造を調べることもお勧めします。実際にコードから出現する可能性のあるエラーを処理するためには、それを実際に使用する必要があります。

関連する問題