- - PR -
DataGridに表示した特定のフィールドのデータを変換したい VB.NET
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-01-06 11:58
Windowsアプリケーションで、DataGridに表示したテーブル特定のフィールドのデータを条件によって変換したいのですが、SQL・QUERY等を使用して実現は可能でしょうか?
例)XというテーブルのAというフィールドが1の時→”合格” 2の時→”不合格” 3の時→”保留” 私は以下のように書いたのですが、「'データ変換」の個所で「'Item'は'Read Only'です。」と表示されます。 ______________________________________________________________________________________ 'フィールドの指定 OleDbDataAdapter1.SelectCommand.CommandText = "select A, フィールド1, フィールド2 from X" OleDbDataAdapter1.Fill(Dataset11) 'データ変換 Select Case Dataset11.Tables("X").Columns("A").ToString Case 1 Dataset11.Tables("X").Columns("A") = "合格" Case 2 Dataset11.Tables("X").Columns("A") = "不合格" Case 3 Dataset11.Tables("X").Columns("A") = "保留" End Select 'レコードの指定 dtview = New DataView(Dataset11.Tables("X"), "フィールド1 = '" + TextBox3.Text + "'", "フィールド2 DESC", DataViewRowState.CurrentRows) DataGrid1.DataSource = dtview _____________________________________________________________________________________ 私なりに検討したが、解決する糸口が見つかりませんでした。 何か解決策に心当りがありましたら、ご教授頂けないでしょうか |
|
投稿日時: 2005-01-06 14:31
SQLで取得する時に変換してからFillするのでは駄目なのですか?
select case [A] when '1' then '合格' when '2' then '不合格' when '3' then '保留' end as [A], [フィールド1], [フィールド2] from [X] |
|
投稿日時: 2005-01-06 16:15
禰宜さん、回答頂きありがとうございます。
_________________________________________________________________________________________ SQLで取得する時に変換してからFillするのでは駄目なのですか? select case [A] when '1' then '合格' when '2' then '不合格' when '3' then '保留' end as [A], [フィールド1], [フィールド2] from [X] _________________________________________________________________________________________ SQLで取得する時に変換しようとすると例外エラーがでてしまいます。 フィールドの指定 OleDbDataAdapter1.SelectCommand.CommandText = "select フィールド1, フィールド2, select case A when 1 then '合格' when 2 then '不合格' when 3 then '保留' end as A from X" OleDbDataAdapter1.Fill(Dataset11) 'レコードの指定 dtview = New DataView(Dataset11.Tables("X"), "フィールド1 = '" + TextBox3.Text + "'", "フィールド2 DESC", DataViewRowState.CurrentRows) DataGrid1.DataSource = dtview Aは数値型で定義されています。 そこにテキスト型のデータを入れようとするためにエラーが出るのかと思ったのですが、数値型を入れてても改善しませんでした。 そのためいろいろな方法を模索していたのです。 上記のコードでは上手く行かないのですが、何か問題はございませんでしょうか? |
|
投稿日時: 2005-01-06 17:10
>SQLで取得する時に変換しようとすると例外エラーがでてしまいます。
コードのどの部分で、どんなエラーがでますか? DataSet11の構成はどうなっていますか? |
|
投稿日時: 2005-01-06 18:09
OleDbDataAdapter1.Fill(Dataset11)
ここで処理が止ります。 メッセージは「'System.Data.OleDb.oleDbException'のハンドルされていない例外がSystem.data.dllで発生しました」と表示されます。 DataSet11の構成については問題と考えられる要素が見つからないので、どのように説明したらわかりません。 |
|
投稿日時: 2005-01-06 18:33
OleDbDataAdapter1.Fill(Dataset11)
ここで処理が止ります。 メッセージは「'System.Data.OleDb.oleDbException'のハンドルされていない例外がSystem.data.dllで発生しました」と表示されます。 DataSet11の構成については問題と考えられる要素が見つからないので、どのように説明したらわかりません。 力足らずで申し訳ありません。 |
|
投稿日時: 2005-01-06 19:13
>OleDbDataAdapter1.Fill(Dataset11)
この部分を Dim ds As New DataSet OleDbDataAdapter1.Fill(ds) これに置き換えると、 >OleDbDataAdapter1.Fill(Dataset11) >ここで処理が止ります。 これは解消されて、次の行に進みますか? |
|
投稿日時: 2005-01-06 22:06
SQLの質問なら、対象のデータベースシステムの名称、バージョン番号を明記しましょう。
って、あれ?何を変えたいの? > Dataset11.Tables("X").Columns("A") = "合格" これ、列の名称が変わってしまいますよ?列の名称は変えられないでしょうねぇ。 そうじゃなくて、ある行の、列の値を変えるんですよね? ' SELECTせずに、プログラム中で変更する場合 ' データ変換 ' 文字列型のADash列を追加しておく Dataset11.Tables("X").Columns("ADash").Expression = "IIF(A=1, '合格', IIF(A=2, '不合格', '保留'))" /または/ -- SELECT文で変更したものを取り出す場合 SELECT CASE WHEN A=1 THEN '合格' WHEN A=2 THEN '不合格' ELSE '保留' END AS ADash, ... これでいけません? > DataSet11の構成については問題と考えられる要素が見つからない まぁ、ある意味、そうでしょうね。 DataSet1で列Aを「数値」と定義しているのに、データベースから「文字列」が返ってきたら、エラーになると思いませんか? _________________ |