- PR -

DataGridに表示した特定のフィールドのデータを変換したい VB.NET

投稿者投稿内容
co.jp
常連さん
会議室デビュー日: 2004/03/19
投稿数: 20
投稿日時: 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

_____________________________________________________________________________________

私なりに検討したが、解決する糸口が見つかりませんでした。
何か解決策に心当りがありましたら、ご教授頂けないでしょうか
浮嶋
会議室デビュー日: 2004/01/08
投稿数: 14
投稿日時: 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]
co.jp
常連さん
会議室デビュー日: 2004/03/19
投稿数: 20
投稿日時: 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は数値型で定義されています。
そこにテキスト型のデータを入れようとするためにエラーが出るのかと思ったのですが、数値型を入れてても改善しませんでした。
そのためいろいろな方法を模索していたのです。

上記のコードでは上手く行かないのですが、何か問題はございませんでしょうか?







浮嶋
会議室デビュー日: 2004/01/08
投稿数: 14
投稿日時: 2005-01-06 17:10
>SQLで取得する時に変換しようとすると例外エラーがでてしまいます。

コードのどの部分で、どんなエラーがでますか?

DataSet11の構成はどうなっていますか?

co.jp
常連さん
会議室デビュー日: 2004/03/19
投稿数: 20
投稿日時: 2005-01-06 18:09
OleDbDataAdapter1.Fill(Dataset11)
ここで処理が止ります。
メッセージは「'System.Data.OleDb.oleDbException'のハンドルされていない例外がSystem.data.dllで発生しました」と表示されます。

DataSet11の構成については問題と考えられる要素が見つからないので、どのように説明したらわかりません。
co.jp
常連さん
会議室デビュー日: 2004/03/19
投稿数: 20
投稿日時: 2005-01-06 18:33
OleDbDataAdapter1.Fill(Dataset11)
ここで処理が止ります。
メッセージは「'System.Data.OleDb.oleDbException'のハンドルされていない例外がSystem.data.dllで発生しました」と表示されます。

DataSet11の構成については問題と考えられる要素が見つからないので、どのように説明したらわかりません。
力足らずで申し訳ありません。
浮嶋
会議室デビュー日: 2004/01/08
投稿数: 14
投稿日時: 2005-01-06 19:13
>OleDbDataAdapter1.Fill(Dataset11)
この部分を

Dim ds As New DataSet
OleDbDataAdapter1.Fill(ds)

これに置き換えると、

>OleDbDataAdapter1.Fill(Dataset11)
>ここで処理が止ります。

これは解消されて、次の行に進みますか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 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を「数値」と定義しているのに、データベースから「文字列」が返ってきたら、エラーになると思いませんか?

_________________

スキルアップ/キャリアアップ(JOB@IT)