it技術:dotnet:datatableおよびdataviewの注意点
差分
このページの2つのバージョン間の差分を表示します。
| it技術:dotnet:datatableおよびdataviewの注意点 [2017/03/26 11:37] – 作成 yajuadmin | it技術:dotnet:datatableおよびdataviewの注意点 [2017/03/26 11:38] (現在) – yajuadmin | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| ====== DataTableおよびDataViewの注意点 ====== | ====== DataTableおよびDataViewの注意点 ====== | ||
| + | ===== 1.DataViewのSortメソッドやDataTableのSelectメソッドがOracleのOrder By の結果と異なる ===== | ||
| + | Oracleの標準ソートは、Nullが最大値として扱われるため、SQLで取得したデータを表示した場合と、DataView のSortメソッドや | ||
| + | | ||
| + | ソートキーにNULL項目が含まれる場は、NULLを最大値に変換したのをソートキーとするなどの考慮が必要である。 | ||
| + | |||
| + | 参照:[[http:// | ||
| + | |||
| + | ===== 2.DefaultViewプロパティで取得できる DataView は常に同じインスタンスである ====== | ||
| + | <code vbnet> | ||
| + | Dim dvView As DataView | ||
| + | dvView = dtTable.DefaultView | ||
| + | </ | ||
| + | |||
| + | DataTable の「DefaultView」プロパティで取得できる DataView は常に同じインスタンスを使用している。\\ | ||
| + | 例として、dvView.RowFilter を指定して抽出し、別の箇所で全て抽出するため dvView.RowFilter を指定しなかった場合、以前の | ||
| + | | ||
| + | |||
| + | 全件取得するなら、この例の場合 RowFilter を再設定する必要がある。\\ | ||
| + | 本来は、同じ DataTable から異なる DataView を生成する場合は、下記の方法を用いた方がいいようです。 | ||
| + | <code vbnet> | ||
| + | Dim dvView As DataView = new DataView() | ||
| + | dvView.Table = dtTable | ||
| + | </ | ||
| + | |||
| + | 参照:[[http:// | ||
| + | |||
| + | ===== 3.追加してすぐに削除すると削除マークとはならずに本当に削除されてしまう ====== | ||
| + | DataTable型のデータを渡す先の処理で RowState.Deleted を見て判断しているので、削除データを作るべく追加した上で削除してみたが、 RowState.Deleted にならないため調査してみたところ AcceptChanges() する必要があった。 | ||
| + | |||
| + | <code vbnet> | ||
| + | ' | ||
| + | dtResult.Merge(LdtDeleteMeisai) | ||
| + | |||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | dtResult.AcceptChanges() | ||
| + | |||
| + | ' | ||
| + | dvView = dtResult.DefaultView | ||
| + | dvView.RowFilter = " | ||
| + | For i As Integer = 0 To dvView.Count - 1 | ||
| + | dvView.Delete(0) | ||
| + | Next | ||
| + | </ | ||
it技術/dotnet/datatableおよびdataviewの注意点.1490495837.txt.gz · 最終更新: 2017/03/26 11:37 by yajuadmin
