2016-09-22 7 views
2

私は5行のデーター配列DataRow[] drRequestを持っています。 そしてiはforeachを使用して各行を反復し、C#でDataRow []から行を削除する

foreach (DataRow dr in drRequest) 
{ 
    dr.Delete(); 

しかしその後drRequest.Length私はDatatableを使用することはできません5の代わりに0

を返すを使用して行を削除しています、私はDataRow[]

答えて

5
を使用する必要が

DataRow.Deleteはこの行をDataTableから削除しません。この行は、「DataAdapterを使用してdataAdapter.Updateを呼び出すと、データソースから削除されます」というマークが付けられます。削除したい場合には、Removeを使用します。

foreach (DataRow dr in drRequest) 
{ 
    dr.Table.Rows.Remove(dr); 
} 
+0

この行を使用する利点はありません:( – Devendra

+1

@Devendra:配列を変更することはできません。固定サイズです。これを行うには、 'drRequest = drRequest [0] .Table .Select(); ' –

2

drRequestが本当にDataRow[]であれば、それは常には、(それがで始めることだったものは何でも)の長さを持つことになります。配列は長さを決して変更しません。決して。あなたはnullの価値がありますが、後で配列を見ている他のコードでは期待されないかもしれません。これは、配列が単にであることの特徴です。

お客様代替データ構造を検討してください。たとえば、の場合はList<T>のものは削除できます。しかし、シーンの背後にはシャッフルダウンが含まれています。選択的に削除する場合は、list.RemoveAll(x => {return true to remove, false to keep});がこれを最適に行う方法を知っています。

関連する問題