2016-07-23 18 views

答えて

1

"Better"は主観的な用語です。 「高速」に関しては、何があってもループスルーしてRowStateをチェックしなければなりません。

Private Function ActiveRows(dt As DataTable) As Int32 
    ... your loop 
    Resturn iRunRows 
End Function 

それとも、拡張メソッドを使用することができます:

Dim activeRowCount = dt.AsEnumerable. 
     Count(Function(q) q.RowState <> DataRowState.Deleted). 
あなたは、少なくともコードを繰り返していないと、任意のテーブルの上にそれを使用することができ、そうすることの一つは、関数の中で、あなたのループを置くことであろう

ループが速い可能性は低いですが、どこかでループする必要がありますが、短くなります。

+0

私はこれが好きです。 1行。簡単です。ありがとう。 –

+0

@IvanPerezこれが質問に答える場合は、チェックマークをクリックしてUnAnswered Listから外し、助けがあれば上矢印をクリックしてください。回答を受け入れると、他のユーザーが良い回答を見つけるのに役立ちます。 – Plutonix

0

DataTableクラスは、DataRow.Stateに基づいて行セットを取得するさまざまな手段を提供します。

'DataTable.Select` Methodがおそらく最も単純です。

dt.Select("", "", DataViewRowState.CurrentRows)

DataViewを使用し、それをRowStateFilterプロパティを設定することです。この例では、代わりにDataViewスタンドアロンインスタンスを作成するときにDataTable.DefaultViewプロパティを変更します。

Dim dt As New DataTable 

dt.Columns.Add("c1") 
For i As Int32 = 1 To 100 
    dt.Rows.Add(i) 
Next 
dt.AcceptChanges() 
Debug.Print(dt.Rows.Count.ToString()) ' prints 100 

For i As Int32 = 99 To 0 Step -2 
    dt.Rows.Item(i).Delete() 
Next 
Debug.Print(dt.Rows.Count.ToString()) ' prints 100 

dt.DefaultView.RowStateFilter = DataViewRowState.CurrentRows 
Dim count As Int32 = dt.DefaultView.Count 
Debug.Print(count.ToString()) ' prints 50 

' loop thru DataView rows 
For Each drv As DataRowView In dt.DefaultView 
    Dim dr As DataRow = drv.Row 
    Debug.Print(dr.Item(0).ToString()) 
Next 

これらのメソッドがルーピングソリューションよりも優れているかどうかは、オブザーバ側での主観的な呼び出しです。

+0

情報ありがとう、私は決してcurrentrowsを選択しようとしたことはありません。 :) –

関連する問題