- - PR -
データテーブルの更新を、連結先のコンボボックスに反映する方法
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-11-22 01:13
コンボボックスのデータソースにデータテーブルを連結し、
選択された行を一番上に移動したいのですが、上手く行きません。 たとえば、コンボボックスの▼をクリックしたとき 数字0 数字1 数字2 数字3 数字4 と並んでいるとして、"数字3"が選択されたとすると、 数字3 数字0 数字1 数字2 数字4 という状態にしたいのですが…。 以下のプログラムを実行すると、データテーブルの行位置の変更までは 上手くいっているようですが、 データソースの変更がコンボボックスに反映されません。 初歩的な質問かもしれませんが、よろしくお願い致します。 ※データテーブルの行位置の変更方法につきましても、 もっとスマートな方法があるような気がします…。 方法をご存知の方がおられましたら、ご教示ください。 ◆ソースコード private void Form1_Load(object sender, System.EventArgs e) { DataTable table = new DataTable(); table.Columns.Add("Japanese", typeof(string)); table.Columns.Add("English", typeof(string)); for (int i = 0; i < 100; i++) { table.Rows.Add(new object[] {"数字" + i.ToString(), "Number" + i.ToString()}); } comboBox1.DataSource = table; comboBox1.DisplayMember = "Japanese"; comboBox1.ValueMember = "English"; } private void comboBox1_Validated(object sender, System.EventArgs e) { DataTable table = comboBox1.DataSource as DataTable; if (table != null) { // コンボボックスで選択された行をデータテーブルの一番上に移動する // ※もっとスマートな方法があるのでは・・・? DataRowView selectedRowView = (DataRowView)comboBox1.SelectedItem; DataRow selectedRow = selectedRowView.Row; DataRow row = table.NewRow(); row.ItemArray = selectedRow.ItemArray; table.Rows.InsertAt(row, 0); table.Rows.Remove(selectedRow); // データソースの更新をコンボボックスに反映させたい(が、上手くいかない) comboBox1.DataSource = null; comboBox1.DataSource = table; comboBox1.DisplayMember = "Japanese"; comboBox1.ValueMember = "English"; comboBox1.SelectedIndex = 0; } } [ メッセージ編集済み 編集者: kurage 編集日時 2006-11-22 01:15 ] | ||||
|
投稿日時: 2006-11-22 03:04
#別のコンボボックスに、じゃなくて同じコンボボックスに、でいいのですよね?
Validatedでやっても動かないような。。SelectionChangeCommittedあたりかな データソースをいじれば事足ります。(comboBox1.DataSource = とかは不要) たとえば、
| ||||
|
投稿日時: 2006-11-22 09:35
べるさん、ご回答ありがとうございます。
お教えくださった方法を試してみましたところ、 選択された項目が、一番上ではなく一番下に表示されてしまいます。 データテーブル内では、当該レコードが正しく一番上に移動している様子なのですが…。 <選択前> 数字0 数字1 数字2 数字3 ←選択 数字4 <選択後> 数字0 数字1 数字2 数字4 … 数字99 数字3 ←一番下に表示されてしまう _________________ | ||||
|
投稿日時: 2006-11-23 03:06
私の環境.NET2.0(VS2005)では正常に動いています。
環境が書いてないですが1.1なのですかね。 最後に table.AcceptChanges(); を加えたら上に表示されました。(理由は深く調べてないのですが。。) | ||||
|
投稿日時: 2006-11-23 11:52
すみません、環境を書くべきでしたよね…。 ご推測の通り、NET1.1(VS2003)です。 最後に table.AcceptChanges(); を付け加える方法で、 解決することができました(^^)ありがとうございました。 |
1