C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: SQLを使わずにデータテーブルを更新し、コピー


(過去ログ 17 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■6459 / inTopicNo.1)  SQLを使わずにデータテーブルを更新し、コピー
  
□投稿者/ 北村 (3回)-(2007/08/14(Tue) 17:28:49)

分類:[.NET 全般] 

よろしくお願いします。


 private void sortData()
        {
            DataTable dtbl = dataSet1.Tables[0];
            DataTable dtbl2 = dtbl.Clone();

            dtbl.DefaultView.Sort = "顧客名 ASC";
            foreach( DataRowView drv in dtbl.DefaultView){
                dtbl2.ImportRow(drv.Row);
            }
            for (int i = 0; i < dtbl.Rows.Count; i++) {
                dataGridView2.Rows.Add(i + 1, dtbl2.Rows[i][0],     dtbl2.Rows[i][1]);
            }
            
                    }


これで、既存のデータテーブルを顧客名でソートし、Datagridviewに表示させています。さらに下のソースで、ソート後のデータテーブルを上書きしようと
しました。コンソールで変更されているのは確認したのですが、同一フォームでの処理の連携がとれていません(例えばloadでこれらを処理した後ボタンクリック等でdtblを見ても、更新が反映されていない)


       dtbl = dtbl2.Clone();
             foreach( DataRowView drv in dtbl2.DefaultView){
                dtbl.ImportRow(drv.Row);
            }
           
            dtbl.AcceptChanges();


下記は参考にしたサイトです。よろしくお願いします。

http://www.atmarkit.co.jp/fdotnet/dotnettips/363dtsort/dtsort.html

引用返信 編集キー/
■6461 / inTopicNo.2)  Re[1]: SQLを使わずにデータテーブルを更新し、コピー
□投稿者/ はつね (224回)-(2007/08/14(Tue) 21:13:51)
No6459 (北村 さん) に返信
> これで、既存のデータテーブルを顧客名でソートし、Datagridviewに表示させています。
> さらに下のソースで、ソート後のデータテーブルを上書きしようとしました。

コードの次の部分をみると、dtbl2.Rowsの内容をdataGridView2.RowsにAddしていますね。
| dataGridView2.Rows.Add(i + 1, dtbl2.Rows[i][0], dtbl2.Rows[i][1]);

つまり、dtbl2とdataGridView2の関係はBindingな関係ではなく単に値をAddしている元ネタとAdd先ですから、dataGridView2への変更は自動的にdtbl2には反映されません。

参考にしたURLを記載していただいていますが、そこに書かれている記事の最後のほうに今回の問題の解答が明記されていませんか?

引用返信 編集キー/
■6476 / inTopicNo.3)  Re[2]: SQLを使わずにデータテーブルを更新し、コピー
□投稿者/ 北村 (4回)-(2007/08/15(Wed) 14:31:45)
No6461 (はつね さん) に返信
> ■No6459 (北村 さん) に返信
>>これで、既存のデータテーブルを顧客名でソートし、Datagridviewに表示させています。
>>さらに下のソースで、ソート後のデータテーブルを上書きしようとしました。
>
> コードの次の部分をみると、dtbl2.Rowsの内容をdataGridView2.RowsにAddしていますね。
> | dataGridView2.Rows.Add(i + 1, dtbl2.Rows[i][0], dtbl2.Rows[i][1]);
>
> つまり、dtbl2とdataGridView2の関係はBindingな関係ではなく単に値をAddしている元ネタとAdd先ですから、dataGridView2への変更は自動的にdtbl2には反映されません。
>

返答ありがとうございます

言葉足らずだったかもしれませんが、こちらが提示したURL先は、データテーブル自体は更新せず、ソートした結果をDatagridviewに表示させているかと
思います。

こちらの希望としては、そのソートされた状態を既存のデータテーブルに上書き、又は別のデータテーブルを作成して、データ挿入して、使えるようにしたいというものでした。

上書きするパターンは、上書きするメソッドが分からなかったので、addメソッドで加えるくらいしか考えつかなかったのですが、1度既存のデータテーブルをクリアするメソッドというのも分かりませんでした。
又、新規にデータテーブルを作成するのは効率上良くないと思い、作成を
躊躇っています。

この場合の最適解とは一体どのようなものなのでしょうか?

> 参考にしたURLを記載していただいていますが、そこに書かれている記事の最後のほうに今回の問題の解答が明記されていませんか?
>
すみません、分かりませんでした。。
引用返信 編集キー/
■6482 / inTopicNo.4)  Re[3]: SQLを使わずにデータテーブルを更新し、コピー
□投稿者/ はつね (227回)-(2007/08/15(Wed) 19:05:45)
No6476 (北村 さん) に返信
> こちらの希望としては、そのソートされた状態を既存のデータテーブルに上書き、又は別のデータテーブルを作成して、データ挿入して、
> 使えるようにしたいというものでした。

DataGridViewにソートされたデータビューを連結しない理由は何でしょうか。
連結する事でDataGridViewでの変更はデータビューのDataTableへ自動反映されます。

ご自身が紹介しているURLの最後にだって「ソートされたレコードをDataGridコントロールなどに表示したいだけであれば、・・・」との記載があるくらいですよ。


> この場合の最適解とは一体どのようなものなのでしょうか?

最適解かどうかは、まずは標準的な方法で行ってみて、そこで発生した問題点や改善点が判明して初めて分かるものではないでしょうか。
標準的な方法を使用するというのも、状況によっては(というか大抵の場合は)最適解であると思います。

引用返信 編集キー/
■6520 / inTopicNo.5)  Re[3]: SQLを使わずにデータテーブルを更新し、コピー
□投稿者/ Jitta (399回)-(2007/08/16(Thu) 21:47:55)
No6476 (北村 さん) に返信
> こちらの希望としては、そのソートされた状態を既存のデータテーブルに上書き、又は別のデータテーブルを作成して、データ挿入して、使えるようにしたいというものでした。

これって、「データベース中のデータを、ソートされた状態にしたい」ってことでしょうか?

 そうであれば、それはできません。データベースは、データの集合であって、データに序列を付けて保存しているわけではないからです。
 ソートしたい場合は、ソート条件を付けて抽出します。

SELECT * FROM table → table についているインデックスによって探し当てられる順序が決まるが、データファイルのフラグメントの状態によって必ず一定なわけではない。

SELECT * FROM table ORDER BY column → column によって順序づけた後に取り出す。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -