• ベストアンサー

Bindingsource.Sortが効かない

visualstudioでC#を使用しています。 DataGridViewのDataSourceにBindingSourceを使用し、BindingSource.Sortで並び替えを実施しようとしています。 BindingSourceのListやDataGridViewのDataSource.Listを見てみるとソートされているのですが画面には反映されません。。。 BindingSourceのソート関連のプロパティはすべてtrueになっています。 画面の描画に使用しているのはListではないのでしょうか?また、ソートを無効にしてしまうプロパティ等があるのでしょうか? 教えて下さい!お願いします!!

質問者が選んだベストアンサー

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (740/5646)
回答No.2

失礼しました。 以下のコードで試していたのですが、ソートされて表示されました。 質問者さまの方式と違うかも知れませんが、このコードを試してみていただけますか。 dataGridView1はコントロールをはりつけただけで、プロパティは変更していません。 ---- var dt = new DataTable(); dt.Columns.Add("Column1"); dt.Columns.Add("Column2"); dt.Columns.Add("Column3"); dt.Rows.Add("3", "B", "あ"); dt.Rows.Add("2", "A", "う"); dt.Rows.Add("1", "C", "い"); var bs = new BindingSource(); bs.DataSource = dt; dataGridView1.DataSource = bs; bs.Sort = "Column1"; ----

sachi-_-TK
質問者

お礼

ありがとうございます! 試してみます!!

Powered by GRATICA

その他の回答 (1)

  • dell_OK
  • ベストアンサー率13% (740/5646)
回答No.1

もしかしてリストをバインドされていますか。 DataGridViewではDataTableでないとソートできなかったと思います。 リストでソートするにはこちらのような工夫が必要になりそうです。 (動作未確認) https://garafu.blogspot.com/2016/09/cs-sorablebindinglist.html

sachi-_-TK
質問者

補足

回答ありがとうございます! DataTableをバインドしています。。。

関連するQ&A

  • VB DataGridView 行削除

    Visualbasic 2010 を利用してWindowsFormアプリケーションを開発しております。 データベースはORACLE11を利用しております。 VB側よりOracleDataAdapterを利用してDatatableにORACLEのSELECT結果を格納しています。 DataGridViewには上記のDataTableをDataSourceとして割り当てております。 このDataGridViewに並び替え機能を組み込んでおります。 ※DataViewのSortを利用して並び替えを実現しております。 この後にDataGridViewの行削除を行うと以下の例外が発生します。 一意制約(XXX.PKY_テストデータ)に反しています Oracle.DataAccess.Client.OracleException これはDataTableをSortしたためOracleDataAdapterと一致しなくなったことが原因ではないかと推測しております。 DataGridViewの並び替えを行っても正常に行削除を行いDataTableにも反映する方法が分る方がいらっしゃいましたらご教授頂けないでしょうか。 VBソース抜粋 ・データ抽出 '/ SQLをOracleで実行した結果をデータアダプタに格納 Dadp5 = New OracleDataAdapter("SELECT * from テストデータ", CONFIG.Database) Dadp5.Fill(dt_test) Me.DataGridView_TEST.DataSource = dt_test ・並び替え(降順) Dim dv = New DataView(dt_test) dv.Sort = "テストコード DESC" dt_test = dv.ToTable Me.H_DataGridView_test.DataSource = dt_test ・行削除 Dim scBuilder As New OracleCommandBuilder(Dadp5) '/ データグリッドビューの編集内容をデータベースへ反映 '/ 生成されたSQLを実行する Dadp5.Update(dt_test) ※ここで例外が発生致します。 お手数おかけ致しますが宜しくお願い致します。 以上です。

  • PostgreSQL+DataGridView

    質問させてください。 環境:PostgreSQL、VB.NET2010、Npgsql PostgreSQL上のDBには以下のテーブルを準備 create table test_table ( id serial not null primary key, category_name text not null ); とりあえず1行のデータのみ入っています。 ユーザフォームにDataGridViewとButtonとBindingSourceを1つづつ配置。 以下のプログラムでフォームロード時にDBの内容をDataGridViewへ表示させることまでできました。 Imports Npgsql Public Class Form1 Public Const conn = "Server=****;Port=****;User Id=****;Password=****;Database=****;" Private DA As NpgsqlDataAdapter Private DT As New DataTable Private Sub Form1_Load(省略) Try Dim command As String = "select * from test_table" DA = New Npgsql.NpgsqlDataAdapter( command, conn ) DT = New DataTable DA.Fill(DT) BindingSource1.DataSource = DT DataGridView1.DataSource = BindingSource1.DataSource Catch ex As Exception MessageBox.Show(ex.Message.ToString(), "エラー") End Try End Sub End Class そこで、このDataGridViewへユーザが入力、修正し、配置したボタンを押すことでDBへ反映させたいのですが、この部分がよくわからなくて困っています。 PostgreSQL以外のDBはサンプルが沢山あるのですが・・・・ よろしくお願いします。

  • Microsoft Visual C++ 2008 Express E

    Microsoft Visual C++ 2008 Express EditionとMicrosoft SQL Server 2008 を使用してWindowsフォームアプリケーションでプログラミングを行っています。 今完成させたい機能は、データベースの値をDataGridViewに表示する。 その表示画面のDataGridViewに値を書き込み更新ボタンをクリックしたらそれがデータベースに 反映される。 DataGridViewのレコードを削除でき、それもデータベースに反映させることができる。 以上の三つです。 DataSetにデータを読み込ませて、DataGridViewに入れるとか、BindingSourceを使用する必要が あるなどは、どこのサンプルコードにも登場してくるのでなんとなく分かるのですが、完成には至って いません。 Visual C++のサンプルコードがあれば助かるのですが、今はVC#などのサンプルコードを見ながら プログラムを作成しています。 知識があまりないものなので、もしよろしければやさしい解説を宜しくお願い致します。

  • C# DataGridViewで列名を変更したい。

    はじめまして。 WindowsXP,VisualStudio2005,C#にて開発を行っています。 リストをDataGridViewのデータソースにセットし、 表示しています。 表示されると、 アルファベット順でかつ、 リストの項目名が、 DataGridViewの列名になります。 列名と並び順をプログラム上で変更するにはどうしたらよいのでしょうか? メインソース List<MasterItem> masterList; MasterManager mng = new MasterManager(); // データの取得 masterList = mng.GetList(); // データソースのセット this.MasterGrid.DataSource = masterList; --------------- GetListメソッド List<MasterItem> list = new List<MasterItem>(); MasterItem item; item = new MasterItem(); item.Code = 1234567; item.XXXX = "XXXXX";

  • FlexGridの一部のみ表示を更新したいのです。

    FlexGridの一部のみ表示を更新したいのです。 VisualStudio2003、C#でWindowsアプリを開発しています。 一覧表示にFlexGridを使用しています。 とある処理の中で、FlexGridに表示するデータの一部が変更されるので、 その変更値を画面に反映するためにFlexGridを再描画する必要があり、 Refreshしているのですが、一覧の再描画に時間がかかっています。 変更のあったセル、または1行のみ、再描画(表示を更新)する事は可能でしょうか?

  • datagridviewでドラッグ操作が出来ません

    VisualStudio2008での、C#の話です。 datagridviewにドラッグ処理でファイルを読み込ませたいのですが出来ません。 まずdatagridviewのプロパティでAllowDropの項目をtrueにしました。 そしてイベントハンドラでDrag&Dropの所に関連付けをして、 その後の指示でファイル名を取得するプログラムを書いたのですが、 ドラッグしてはいけないマークが出ていて そもそもDrag操作自体を受け付けてくれません。 イベント内にブレークポイントも設定してみたのですが、 やはり構文の中にすら入っていかないようです。 ちゃんとネット上のサイトの指示に従ったのですが… 原因が分からず困っています。 どなたか原因が分かる方、教えてください。

  • DataGridViewの列にコンボボックスを表示する方法

    言語:VB2005 データベース:SQLServer 非接続型のデータアクセスです。 .net勉強中の初心者です。件名の件について悩んでいますのでご教授お願いします。 http://dobon.net/vb/dotnet/datagridview/datagridviewcomboboxcolumn.html 上記HPを参考に勉強しています。 DataGridViewComboBoxColumnを使用する方法ではうまく表示できましたが、 DataSourceプロパティを使用する方法ではうまくできません。 (1)の処理を行うとまず、ID 所属コード 所属名称 がDataGridViewにバインドされます。 そこに(2)の処理を行い 所属名称を コンボボックスに変更したいのですが、所属名称の後に 列名が空白のコンボボックスが新たに追加作成されてしまいます。 そして下記のエラーが発生します。 System.FormatException: DataGridViewComboBoxCell の値が有効ではありません この既定のダイアログを置き換えるには、DataError イベントをハンドルしてください。 いったい何がおかしいのか???です。よろしくお願いします。 '**************************************** '(1)DataGridViewにデータをバインドする '**************************************** strsql = "SELECT ID, 所属コード, t1.名称 as 所属名称 FROM ATBL LEFT OUTER JOIN BTBL ON ATBL.所属 = BTBL.コード ORDER BY ID" Dim comm As SqlCommand = New SqlCommand(strsql, Con) Dim dataadapter As SqlDataAdapter = New SqlDataAdapter(comm) dataadapter.MissingSchemaAction = MissingSchemaAction.AddWithKey Dim ds As DataSet = New DataSet() dataadapter.Fill(ds, "テーブル") dgrview.DataSource = ds dgrview.DataMember = "テーブル" '---------------------------------------------------------------------- '(2)DataGridViewにComboBoxを設定する(DataSourceプロパティを使用した例) '---------------------------------------------------------------------- Dim DataSource As New DataTable("DataSource") DataSource.Columns.Add("Value", GetType(String)) DataSource.Columns.Add("code", GetType(Integer)) DataSource.Rows.Add("", 0) DataSource.Rows.Add("小学校", 1) DataSource.Rows.Add("中学校", 2) DataSource.Rows.Add("高校", 3) Dim column As New DataGridViewComboBoxColumn() column.DataPropertyName = "所属名称" column.DataSource = DataSource column.ValueMember = "code" column.DisplayMember = "Value" dgrview.Columns.Add(column)

  • Excel2010 グラフプロパティ変更を一気に

    Excel2010でグラフプロパティ変更をダイヤログボックスの「閉じる」で一気に反映する方法 Excel2010でグラフを描いているとき、ダイヤログボックスでプロパティを1つ変える毎に、ダイヤログボックスを閉じなくても逐次変更が反映されます。これを無効にし、「閉じる」ボタンを押した時点で一気に反映するようにする方法は無いものでしょうか? 軽いデータを描いている時は便利なのですが、データ量が多いと1つ変えるたびに再描画を行うのでとても時間がかかります。 2003までは閉じるで一気に反映されたので良かったのですが。

  • EXCEL VBA ソートにおいて

    EXCEL 2003 のVBAのsortにおいて、解決できなくて困って おります。 名前,色,産地,品質,味,値段,重さ, りんご,赤,青森,10,10,500,100 みかん,黄,和歌山,10,10,300,50 すいか,緑,群馬,10,8,2000,1000 メロン,黄緑,青森,10,8,2500,500 いちじく,赤,鹿児島,8,8,200,100 名前、品質、値段の順に並びかえたいと思い、 excelのVBAの記録でオートフィルタ後に 並び替えを行ったところ下記のコードが記録されました。 Sub Macro28() Cells.Select Selection.AutoFilter Selection.Sort _ Key1:=Range("A2"), Order1:=xlAscending, _ Key2:=Range("D2"), Order2:=xlAscending, _ Key3:=Range("F2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, _ DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, _ DataOption3:=xlSortNormal end sub ところが、これをオブジェクトのマクロに使用して(2,3行目を自分の使い たいように訂正)みると作動しません。 Private Sub CommandButton1_Click() worksheets(1).Select Selection.AutoFilter Selection.Sort _ Key1:=Range("A2"), Order1:=xlAscending, _ Key2:=Range("D2"), Order2:=xlAscending, _ Key3:=Range("F2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, DataOption3:=xlSortNormal End Sub watch 式では 3行目までは worksheets(1).Select = TRUE ですし Selection.AutoFilter = TRUE となっているのですが、 sortの反応が分からない状況です。 Selection.Sort _ Key1:=Range("A2"), Order1:=xlAscending, _ Key2:=Range("D2"), Order2:=xlAscending, _ Key3:=Range("F2"), Order3:=xlAscending, _ Header:=xlYes, OrderCustom:=1, _ MatchCase:=False, Orientation:=xlTopToBottom, _ SortMethod:=xlPinYin, DataOption1:=xlSortNormal, _ DataOption2:=xlSortNormal, DataOption3:=xlSortNormal この部分が問題なのかと考えております。 ネットで調べて worksheets(1).RANGE("A1:G6").Select Selection.sort…… とか worksheets(1).RANGE("A1:G6").sort とかも試してみたのですが、だめでした。 sort を使用するときにselectionとの相性や、 rangeとの兼ね合いで決まり等があるのでしょうか。 色々なサイトを回ってはいるのですが、ちょっと解決 にいたることができません。 どなたか、ご教授いただけると幸いです。

  • Excel2003で、元ファイルから並び替え条件を変えた2個のファイル

    Excel2003で、元ファイルから並び替え条件を変えた2個のファイルがあります。元ファイルを修正した際、その結果を他の2個のファイルに反映させる方法が在りますでしょうか?現在は作業が終わり次第、他のファイルの並び替え条件でソートし、それぞれ上書き保存してます。具体的には、映画のリストで邦題、原題、製作年、監督、主演俳優、評価等のリストで、取り敢えず監督名、主演俳優名の空白部を埋めようとそれぞれソートしてあります。 どうぞ宜しくご教示下さい。

専門家に質問してみよう