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

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

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

Re[5]: DataGridでBooleanカラムにデータが格納されない


(過去ログ 43 を表示中)

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

■22840 / inTopicNo.1)  DataGridでBooleanカラムにデータが格納されない
  
□投稿者/ てく (1回)-(2008/08/04(Mon) 10:31:09)

分類:[VB.NET/VB2005] 

はじめまして。
現在VB.NETで Oracleと連携し、データの登録・検索・表示・印刷を行うツール の開発を行っています。
今回初めてDataGridコントロールやDataTableを扱うことになりました。
そこでどうしても分からない事が発生してしまったため、皆様のお知恵を拝借したく、書き込ませた頂きます。

問題の箇所はOracleからデータをDataSetに取得し、Boolean型のカラムを加えてDataGridに表示する部分です。
当初、コード1のように記述を行い、問題なくデータが表示できていました。
それを関数化するため、コード2のように書き換えたところ、Boolean型のカラムにデータが入らなくなってしまいました。

入るべきデータはコードの変更前後で共通で、Boolean型のカラムに格納されるデータはSelect文で直接0を指定しています。
コード1ではこれがBoolean型のカラムに格納されましたが、コード2の場合は格納されず、結果の末尾にDecimal型の新しいカラムが追加されてしまいます。そのためBoolean型のカラムはNullのままです。
最終的にカラムのスタイルが同じであることは確認しています。

原因は列スタイル部分だと思われますので関連するコードのみ記載します。
過不足等ありましたら申し訳ありませんがご指摘頂けると幸いです。

以下プログラム初心者のコードのためお見苦しいところ等あると思いますが…。
宜しくお願いいたします。

【共通コード:クラスの初期化:DataSet、DataTable、TableStyleの作成】
  Public Sub New(ByRef SetTargetDataGrid As DataGridEx, ByVal DataSetName As String, ByVal DataTableName As String, ByRef SetDBConnectClass As Object)
    'データグリッドコントロールを渡す
    targetDataGrid = SetTargetDataGrid
    DBConnectClass = SetDBConnectClass
    '-------------------------------------------------
    'データセット作成
    mDataSetName = DataSetName
    mDataSet = New DataSet(mDataSetName)
    '-------------------------------------------------
    'データテーブル作成
    mDataTblName = DataTableName
    mDataTbl = mDataSet.Tables.Add(mDataTblName)
    '-------------------------------------------------
    'テーブルスタイルを作成してデータグリッドに追加
    dgTableStyle = New DataGridTableStyle
    dgTableStyle.MappingName = mDataTblName
    targetDataGrid.TableStyles.Add(dgTableStyle)
    '-------------------------------------------------
  End Sub


【コード1】
  *呼び出し元
  dgTableStyle.GridColumnStyles.Add(test(i))
  'データをセット
  SetDataSet()    '※ SQLを実行してデータをデータセットに。バイン

  *コード
  Function test(ByVal i)
    Dim dgTableStyle As DataGridTableStyle     'データテーブルスタイル
    Const maxCol = 4                '表示する総カラム数
    Dim sColumnName(maxCol) As String        '各カラム名称を格納
    Dim iColumnWidth(maxCol) As Integer       '各カラム幅を格納
    Dim dgColumn As DataColumn           'カラム作成時に格納するWORK変数
    Dim dgColumnStyleStr  '列スタイル作成時に格納するWORK変数(チェックボックス以外用)
    Dim dgColumnStyleBol    '列スタイル作成時に格納するWORK変数(チェックボックス用)
    'カラム名セット()
    sColumnName(0) = "chk"
    sColumnName(1) = "サーバ名"
    sColumnName(2) = "アカウント"
    sColumnName(3) = "ログイン日時"
    sColumnName(4) = "受理番号"

    'カラム幅セット()
    iColumnWidth(0) = 40
    iColumnWidth(1) = 100
    iColumnWidth(2) = 60
    iColumnWidth(3) = 120
    iColumnWidth(4) = 70

    If i = 0 Then
      dgColumn = New DataColumn(sColumnName(i), GetType(Boolean))
    Else
      dgColumn = New DataColumn(sColumnName(i), GetType(String))
    End If
    mDataTbl.Columns.Add(dgColumn)
    dgColumn = Nothing

    '列スタイルを作成してテーブルスタイルに追加
    If i = 0 Then
      'チェックボックス
      dgColumnStyleBol = New DataGridBoolColumn
      dgColumnStyleBol.MappingName = sColumnName(i)
      dgColumnStyleBol.HeaderText = sColumnName(i)      '見出し
      dgColumnStyleBol.Width = iColumnWidth(i)        '幅
      dgColumnStyleBol.Alignment = HorizontalAlignment.Center '中央寄せ
      dgColumnStyleBol.AllowNull = False           'Null禁止
      dgColumnStyleBol.ReadOnly = False            '書き込み可
      test = dgColumnStyleBol
    Else
      'チェックボックス以外
      dgColumnStyleStr = New DataGridTextBoxColumn
      dgColumnStyleStr.MappingName = sColumnName(i)
      dgColumnStyleStr.HeaderText = sColumnName(i)
      dgColumnStyleStr.Width = iColumnWidth(i)
      dgColumnStyleStr.NullText = ""             'Nullの時空文字列
      dgColumnStyleStr.ReadOnly = True
      test = dgColumnStyleStr
    End If
  End Function

【コード2】

  *呼び出し元
  clsDataGrid.AddColumn("chk", 40, GetType(Boolean), , False, False, "C")
  clsDataGrid.AddColumn("サーバ名", 110, GetType(String))
  clsDataGrid.AddColumn("アカウント", 70, GetType(String))
  clsDataGrid.AddColumn("ログイン日時", 160, GetType(String))
  clsDataGrid.AddColumn("受理番号", 80, GetType(String))
  clsDataGrid.AddColumn("ファイル名", 80, GetType(String))

  'データをセット
  SetDataSet()    '※ SQLを実行してデータをデータセットに。バイン

  *コード
  '**********************************************************************************
  '* [ルーチン名]AddColumn
  '* [機能]データグリッド用のカラムを作成する
  '* [引数] ※*は省略不可
  '*    sColumnName    :*カラム名
  '*    iColumnWidth    :*カラムの幅
  '*    DataType      :*データタイプ (ex: GetType(String)、GetType(Boolean) )
  '*    NullString     :Nullの時の文字列(デフォルトは無し)
  '*    ReadOnry      :上書きの可否[ True :可 / False : 否 ](デフォルトはTrue)
  '*    AllowNull     :Null許可の可否[ True :可 / False : 否 ](デフォルトはTrue)
  '*    justify      :セル内の位置[ R:右 / C: 中央 / L: 左 ](デフォルトはLeft)
  '**********************************************************************************
  Function AddColumn(ByVal sColumnName As String, ByVal iColumnWidth As Integer, _
            ByVal DataType As Object, Optional ByVal NullString As String = "", _
            Optional ByVal ReadOnry As Boolean = True, Optional ByVal AllowNull As Boolean = True, _
            Optional ByVal Justify As String = "L")
    Try

      '---カラムを作成する---------------------------------------
      Dim dgColumn As DataColumn                 'カラム作成時に格納するWORK変数

      dgColumn = New DataColumn(sColumnName, DataType)
      mDataTbl.Columns.Add(dgColumn)
      dgColumn = Nothing
      '---------------------------------------------------------

      '---列スタイルを作成する------------------------------------
      Dim dgColumnStyle '列スタイル作成時に格納するWORK変数

      'データのタイプ
      If DataType Is GetType(String) Then
        dgColumnStyle = New DataGridTextBoxColumnEx
        dgColumnStyle.NullText = NullString
      ElseIf DataType Is GetType(Boolean) Then
        dgColumnStyle = New DataGridBoolColumn
        dgColumnStyle.AllowNull = AllowNull
        dgColumnStyle.NullValue = NullString
      End If

      '各データタイプ共通の設定
      dgColumnStyle.MappingName = sColumnName
      dgColumnStyle.HeaderText = sColumnName

      'セル内の位置/右(R)・中央(C)以外は左寄せ
      Select Case Justify
        Case "R"
          dgColumnStyle.Alignment = HorizontalAlignment.Right
        Case "C"
          dgColumnStyle.Alignment = HorizontalAlignment.Center
        Case Else
          dgColumnStyle.Alignment = HorizontalAlignment.Left
      End Select
      dgColumnStyle.Width = iColumnWidth             '幅
      dgColumnStyle.ReadOnly = ReadOnry              '書き込み可
      dgTableStyle.GridColumnStyles.Add(dgColumnStyle)
      '---------------------------------------------------------

    Catch ex As Exception
      'MessageBox.Show(ex.Message)
    End Try
  End Function
引用返信 編集キー/
■22848 / inTopicNo.2)  Re[1]: DataGridでBooleanカラムにデータが格納されない
□投稿者/ やじゅ (512回)-(2008/08/04(Mon) 13:05:02)
やじゅ さんの Web サイト
No22840 (てく さん) に返信
> 問題の箇所はOracleからデータをDataSetに取得し、Boolean型のカラムを加えてDataGridに表示する部分です。

コード1がバインド後の設定に対して、コード2はバインド前の設定の違いによるもの

DataGridViewのチェックボックスにOracleから抽出した値をセットしたい
http://d.hatena.ne.jp/eagle0319/20080331/1206954527
引用返信 編集キー/
■22853 / inTopicNo.3)  Re[2]: DataGridでBooleanカラムにデータが格納されない
□投稿者/ てく (2回)-(2008/08/04(Mon) 15:31:09)
やじゅ様

ありがとうございます。

> コード1がバインド後の設定に対して、コード2はバインド前の設定の違いによるもの
知識が足りず申し訳ありません。
ここで仰るバインドというのは、MappingNameの設定のことでしょうか。

仮にそうだとして進めさせていただきますと、

dgColumnStyle = New DataGridBoolColumn
カラム作成直後に、
dgColumnStyle.MappingName = sColumnName
dgColumnStyle.HeaderText = sColumnName

とMappingNameを設定しても、結果はやはりNull値となってしまいます。

見当はずれなことを試行していましたら申し訳ありません。

引用返信 編集キー/
■22854 / inTopicNo.4)  Re[3]: DataGridでBooleanカラムにデータが格納されない
□投稿者/ やじゅ (513回)-(2008/08/04(Mon) 15:50:48)
やじゅ さんの Web サイト
No22853 (てく さん) に返信
>>コード1がバインド後の設定に対して、コード2はバインド前の設定の違いによるもの
> 知識が足りず申し訳ありません。
> ここで仰るバインドというのは、MappingNameの設定のことでしょうか。
>

すみません、どうやら私のコードの見間違いのようです。
そうすると何が悪いんやろ。
引用返信 編集キー/
■22855 / inTopicNo.5)  Re[4]: DataGridでBooleanカラムにデータが格納されない
□投稿者/ ロック (55回)-(2008/08/04(Mon) 16:31:45)
私自身、DataGridとDataGridViewの違いが良く分かっていませんが
その辺が、曖昧になっていませんか?

DataGridViewということであれば、
AutoGenerateColumnsがfalseならば、列と紐付けられていないデータが
存在した場合、そのデータは表示されませんが「Decimal型の新しいカラムが追加」
とあるので、trueなのかな〜と考えたとき、逆に今度は同じ列が2つずつ出来そうな
気がして、DataGridViewじゃないのかな〜と思っています。

でも、たぶん基本的にはデータとコントロールの紐付けが上手く動作していないのが
原因だと思うので、チェックボックス型の列を追加した時
その列に紐付けられるデータがtrueかfalseじゃなければ行が表示されなかったような
気がします。
#やじゅさんの参考URLのサイトでも、0ならfalse、1ならtrueを入れていますし
#でも、コード1の時は表示されていたんですよね・・・うーーん

>clsDataGrid.AddColumn("chk", 40, GetType(Boolean), , False, False, "C")
が気になったので、AddColumnのメソッドを探しましたが見つからなかった。orz 力不足ですいません
でも、"C"がすごく気になります。
もうちょっと時間が出来たら、調べてみたいと思います。

引用返信 編集キー/
■22857 / inTopicNo.6)  Re[5]: DataGridでBooleanカラムにデータが格納されない
□投稿者/ てく (3回)-(2008/08/04(Mon) 17:25:16)
ロックさん

ありがとうございます。
私の書き方が悪く、混乱させてしまったことを先にお詫びします。

> 私自身、DataGridとDataGridViewの違いが良く分かっていませんが
> その辺が、曖昧になっていませんか?
ご指摘の通り、特にDataGridViewについては全く理解できていません。
肝心なことを書きそびれてしまっていましたが、Frameworkは1.1なので、DataGridViewは使用していません。

> でも、たぶん基本的にはデータとコントロールの紐付けが上手く動作していないのが
> 原因だと思うので、チェックボックス型の列を追加した時
> その列に紐付けられるデータがtrueかfalseじゃなければ行が表示されなかったような
> 気がします。
> #やじゅさんの参考URLのサイトでも、0ならfalse、1ならtrueを入れていますし
> #でも、コード1の時は表示されていたんですよね・・・うーーん
やはりそこなのですね。
本音を言えば、動かすことよりも原因が知りたいと思っています。

> >clsDataGrid.AddColumn("chk", 40, GetType(Boolean), , False, False, "C")
> が気になったので、AddColumnのメソッドを探しましたが見つからなかった。orz 力不足ですいません
> でも、"C"がすごく気になります。
ああっ! すみません…。それは後述の自作関数の呼び出しです…。
分かり難い記述でお時間をとらせてしまって…もうしわけありません。
引用返信 編集キー/
■22865 / inTopicNo.7)  Re[6]: DataGridでBooleanカラムにデータが格納されない
□投稿者/ ロック (56回)-(2008/08/04(Mon) 22:27:27)
DataGridでしたか〜 そうなると、お力になれません・・・(T_T)

>ああっ! すみません…。それは後述の自作関数の呼び出しです…。
ぐぁ、本当だ
よく見たつもりが、まだまだでした。恥ずかしい・・

それを考慮して見てみると、コード1は自クラス内のDataGridに対して操作しているのに対し
コード2では、clsDataGridというAddColumn()が定義されている別クラスが使われている
ようなので、もしかしたら別のDataGridを参照していたりしませんかね?

ためしに、clsDataGridというクラスを使わずに呼び出し元クラスにAddColumn()を
作って同じように呼んでみてはいかがでしょうか?
それ以外あとコード1とコード2の違いはdgTableStyle.GridColumnStyles.Add()を
1回だけ実行しているか複数回実行しているかの違いくらいしか発見できませんでした


引用返信 編集キー/
■22874 / inTopicNo.8)  Re[7]: DataGridでBooleanカラムにデータが格納されない
□投稿者/ てく (4回)-(2008/08/05(Tue) 09:35:26)
ロック様

ありがとうございます。
やはり今DataGridを使っている人は少ないのかな(^-^;)はぅ…環境が貧弱で悲しい限りです。

> それを考慮して見てみると、コード1は自クラス内のDataGridに対して操作しているのに対し
> コード2では、clsDataGridというAddColumn()が定義されている別クラスが使われている
> ようなので、もしかしたら別のDataGridを参照していたりしませんかね?

Booleanカラム以外のカラムはデータが入りますし、Boolean型カラムも初期値こそNullですが、動作はNull不許可のTrue/False二値を取っていますので、参照先自体は問題なさそうです。

> ためしに、clsDataGridというクラスを使わずに呼び出し元クラスにAddColumn()を
> 作って同じように呼んでみてはいかがでしょうか?

これは実はこちらにご質問させていただく前に実施していたのですが、結果は同じでした。
いずれもclsDataGridクラスからの呼び出し、呼び出し元からの呼び出しでの結果は変わりません。
テーブルスタイルに行スタイルを追加するタイミングも変更してみましたが、こちらも結果は同じでした。

> それ以外あとコード1とコード2の違いはdgTableStyle.GridColumnStyles.Add()を
> 1回だけ実行しているか複数回実行しているかの違いくらいしか発見できませんでした

すみません、載せたコードは一回ですが(問題がBoolean型のカラムのみだと思ったもので…)、カラム数分呼び出しても結果は同じです。
コード1とコード2のカラム数が違いますが、これを揃えても結果は変わりませんでした。


そうなると、行スタイル以外に原因があるのでしょうか…。
行スタイル作成部分の差し替えのみで結果に差異が出たため、またその差異が行スタイルを思わせるため、ここだと思っていたのですが…。
引用返信 編集キー/
■22875 / inTopicNo.9)  Re[8]: DataGridでBooleanカラムにデータが格納されない
□投稿者/ てく (5回)-(2008/08/05(Tue) 10:00:39)
原因がどこにあるかわからないので、もう少しコードを記載させていただきます。
オブジェクト指向のなんたるかも分かっていない若輩者なので、お恥ずかしいコードとなっていますが…。
宜しくお願いいたします。

「呼び出し元」でclsDataSetという名前のDataSetClassを作成し、カラムを追加、データをセット、というように処理を行っています。


###########################################################
DataGridをコントロールするクラス(一部)
###########################################################
Public Class DataGridClass

  Protected targetDataGrid As DataGridEx         '対象となるデータグリッドコントロール
  Protected mDataSet As DataSet              'データセット
  Protected mDataSetName As String            'データセット名
  Protected mDataTbl As DataTable             'データテーブル
  Protected mDataTblName As String            'データテーブル名
  Protected dgTableStyle As DataGridTableStyle
  Protected DBConnectClass As Object           'DB操作クラスの参照

  'New
  Public Sub New(ByRef SetTargetDataGrid As DataGridEx, ByVal DataSetName As String, ByVal DataTableName As String, ByRef SetDBConnectClass As Object)
    'データグリッドコントロールを渡す
    targetDataGrid = SetTargetDataGrid
    DBConnectClass = SetDBConnectClass
    '-----------------------------------------------------------------------------
    'データセット作成
    mDataSetName = DataSetName 'データセットの名前を渡す
    mDataSet = New DataSet(mDataSetName)
    '-----------------------------------------------------------------------------
    'データテーブル作成 
    mDataTblName = DataTableName 'データテーブルの名前を渡す
    mDataTbl = mDataSet.Tables.Add(mDataTblName)
    '-----------------------------------------------------------------------------
    'テーブルスタイルを作成してデータグリッドに追加
    dgTableStyle = New DataGridTableStyle
    dgTableStyle.MappingName = mDataTblName
    targetDataGrid.TableStyles.Add(dgTableStyle)
    '-----------------------------------------------------------------------------
  End Sub

  Function SetDataSet(ByVal stSql As String)
    '格納(外部のクラスを利用してSQLを実行、DataSetに格納する。)
    DBConnectClass.DbExec_Select(stSql, mDataSet, mDataTblName)
    'データをバインド
    DataBind()
  End Function

  Function DataBind()
    'データをバインド
    targetDataGrid.SetDataBinding(mDataSet, mDataTblName)
  End Function

  '【コード2】
  '**********************************************************************************
  '* [ルーチン名]AddColumn
  '* [機能]データグリッド用のカラムを作成する
  '* [引数] ※*は省略不可
  '*    sColumnName    :*カラム名
  '*    iColumnWidth    :*カラムの幅
  '*    DataType      :*データタイプ (ex: GetType(String)、GetType(Boolean) )
  '*    NullString     :Nullの時の文字列(デフォルトは無し)
  '*    ReadOnry      :上書きの可否[ True :可 / False : 否 ](デフォルトはTrue)
  '*    AllowNull     :Null許可の可否[ True :可 / False : 否 ](デフォルトはTrue)
  '*    justify      :セル内の位置[ R:右 / C: 中央 / L: 左 ](デフォルトはLeft)
  '**********************************************************************************
  Function AddColumn(ByVal sColumnName As String, ByVal iColumnWidth As Integer, _
            ByVal DataType As Object, Optional ByVal NullString As String = "", _
            Optional ByVal ReadOnry As Boolean = True, Optional ByVal AllowNull As Boolean = True, _
            Optional ByVal Justify As String = "L")
    Try

      '---カラムを作成する---------------------------------------
      Dim dgColumn As DataColumn                 'カラム作成時に格納するWORK変数

      dgColumn = New DataColumn(sColumnName, DataType)
      mDataTbl.Columns.Add(dgColumn)
      dgColumn = Nothing
      '---------------------------------------------------------

      '---列スタイルを作成する------------------------------------
      Dim dgColumnStyle '列スタイル作成時に格納するWORK変数

      'データのタイプ
      If DataType Is GetType(String) Then
        dgColumnStyle = New DataGridTextBoxColumnEx
        dgColumnStyle.MappingName = sColumnName
        dgColumnStyle.HeaderText = sColumnName
        dgColumnStyle.NullText = NullString
      ElseIf DataType Is GetType(Boolean) Then
        dgColumnStyle = New DataGridBoolColumn
        dgColumnStyle.MappingName = sColumnName
        dgColumnStyle.HeaderText = sColumnName
        dgColumnStyle.AllowNull = AllowNull
        dgColumnStyle.NullValue = NullString
      End If

      ''各データタイプ共通の設定
      'dgColumnStyle.MappingName = sColumnName
      'dgColumnStyle.HeaderText = sColumnName

      'セル内の位置/右(R)・中央(C)以外は左寄せ
      Select Case Justify
        Case "R"
          dgColumnStyle.Alignment = HorizontalAlignment.Right
        Case "C"
          dgColumnStyle.Alignment = HorizontalAlignment.Center
        Case Else
          dgColumnStyle.Alignment = HorizontalAlignment.Left
      End Select
      dgColumnStyle.Width = iColumnWidth             '幅
      dgColumnStyle.ReadOnly = ReadOnry              '書き込み可か
      dgTableStyle.GridColumnStyles.Add(dgColumnStyle)
      '---------------------------------------------------------

    Catch ex As Exception
      'MessageBox.Show(ex.Message)
    End Try
  End Function

  '【コード1】
  Function test(ByVal i)
    Const maxCol = 4                '表示する総カラム数(0から始まる)
    Dim sColumnName(maxCol) As String        '各カラム名称を格納
    Dim iColumnWidth(maxCol) As Integer       '各カラム幅を格納
    Dim dgColumn As DataColumn           'カラム作成時に格納するWORK変数
    Dim dgColumnStyleStr  '列スタイル作成時に格納するWORK変数(チェックボックス以外用)
    Dim dgColumnStyleBol    '列スタイル作成時に格納するWORK変数(チェックボックス用)
    'カラム名セット()
    sColumnName(0) = "No"
    sColumnName(1) = "サーバ名"
    sColumnName(2) = "アカウント"
    sColumnName(3) = "ログイン日時"
    sColumnName(4) = "受理番号"

    'カラム幅セット()
    iColumnWidth(0) = 40
    iColumnWidth(1) = 100
    iColumnWidth(2) = 60
    iColumnWidth(3) = 120
    iColumnWidth(4) = 70

    If i = 0 Then
      dgColumn = New DataColumn(sColumnName(i), GetType(Boolean))
    Else
      dgColumn = New DataColumn(sColumnName(i), GetType(String))
    End If
    mDataTbl.Columns.Add(dgColumn)
    dgColumn = Nothing

    '列スタイルを作成してテーブルスタイルに追加
    If i = 0 Then
      'チェックボックス
      dgColumnStyleBol = New DataGridBoolColumn
      dgColumnStyleBol.MappingName = sColumnName(i)
      dgColumnStyleBol.HeaderText = sColumnName(i)      '見出し
      dgColumnStyleBol.Width = iColumnWidth(i)        '幅
      dgColumnStyleBol.Alignment = HorizontalAlignment.Center '中央寄せ
      dgColumnStyleBol.AllowNull = False           'Null禁止
      dgColumnStyleBol.ReadOnly = False            '書き込み可
      dgTableStyle.GridColumnStyles.Add(dgColumnStyleBol)
      test = dgColumnStyleBol
    Else
      'チェックボックス以外
      dgColumnStyleStr = New DataGridTextBoxColumn
      dgColumnStyleStr.MappingName = sColumnName(i)
      dgColumnStyleStr.HeaderText = sColumnName(i)
      dgColumnStyleStr.Width = iColumnWidth(i)
      dgColumnStyleStr.NullText = ""             'Nullの時空文字列
      dgColumnStyleStr.ReadOnly = True
      dgTableStyle.GridColumnStyles.Add(dgColumnStyleStr)
      test = dgColumnStyleStr
    End If
  End Function
End Class
引用返信 編集キー/
■22876 / inTopicNo.10)  Re[9]: DataGridでBooleanカラムにデータが格納されない
□投稿者/ てく (6回)-(2008/08/05(Tue) 10:01:23)
続きです。

###########################################################
呼び出し元
###########################################################

 Function DataSetInit() As Boolean
  'DataGridClassを新規に取得
  clsDataGrid = New DataGridClass(Me.dtg_logSearch, "d", "e", Cmd)

  'カラムの設定(【コード2】を使用)
  'clsDataGrid.AddColumn("chk", 40, GetType(Boolean), , False, False, "C")
  clsDataGrid.AddColumn("サーバ名", 110, GetType(String))
  clsDataGrid.AddColumn("アカウント", 70, GetType(String))
  clsDataGrid.AddColumn("ログイン日時", 160, GetType(String))
  clsDataGrid.AddColumn("受理番号", 80, GetType(String))
  'clsDataGrid.AddColumn("ファイル名", 80, GetType(String))

  'カラムの設定(【コード1】を使用)
  'clsDataGrid.test(0)
  'clsDataGrid.test(1)
  'clsDataGrid.test(2)
  'clsDataGrid.test(3)
  'clsDataGrid.test(4)

  'データをセット
  clsDataGrid.SetDataSet(GetSql()) 'GetSql():SQLを生成

  DataSetInit = True
 End Function



###########################################################
SQLの実行
###########################################################
 Function DbExec_Select(ByVal StrSql As String, ByRef DsList As DataSet, ByVal TableName As String) As Boolean

  Try
   Cmd.OraCmd.CommandText = StrSql 'Cmd:自クラス OraCmd:OracleConnection
   Dim adp As New OracleDataAdapter(Cmd.OraCmd) 'OraCmd:OracleCommand
   adp.Fill(DsList, TableName)
   DbExec_Select = True
  Catch ex As Exception
   'メッセージ出力
   DbExec_Select = False
  End Try

 End Function

引用返信 編集キー/
■22880 / inTopicNo.11)  Re[1]: DataGridでBooleanカラムにデータが格納されない
□投稿者/ みきぬ (33回)-(2008/08/05(Tue) 11:44:03)
ソースを読んで気になった点。

● コード1って、本当に問題なく表示されてるの?
 ・チェックボックスが、チェックなしの状態で表示されているってこと?(グレーアウトでなく)
 ・0 を Boolean型にどうやってマッピングしているのか? そのコードが見あたらない

● 例外を握りつぶしているけど大丈夫? 例外が発生してたりしない?

● 〜Ex ってクラスが登場してるけど、何をやってるクラス?
引用返信 編集キー/
■22899 / inTopicNo.12)  Re[2]: DataGridでBooleanカラムにデータが格納されない
□投稿者/ てく (7回)-(2008/08/05(Tue) 13:30:17)
みきぬ様、ありがとうございます。

> ● コード1って、本当に問題なく表示されてるの?
>  ・チェックボックスが、チェックなしの状態で表示されているってこと?(グレーアウトでなく)
>  ・0 を Boolean型にどうやってマッピングしているのか? そのコードが見あたらない
コード1を使用した場合は、SQL文で0を指定すればFalse(チェックなし)、-1を指定すればTrue(チェックあり)が問題なく格納・表示されていました。
Boolean型のないOracleからは-1/0でTrue/Falseが取得できるという認識なのですが…間違っているのでしょうか。
コード2の場合はいずれの場合もデータはNull(グレーアウト)になります。

> ● 例外を握りつぶしているけど大丈夫? 例外が発生してたりしない?
例外は発生していません。都度ステップインで確認しています。

> ● 〜Ex ってクラスが登場してるけど、何をやってるクラス?
これは、すみません。関係ないと思って失念していました。
DataGridExクラスは行の高さを変更できないよう、OnMouseMoveイベントとOnMouseDownイベントをオーバーライドしています。
DataGridTextBoxColumnExクラスは紛らわしくてすみません、DataGridTextBoxColumnクラスと等価です。(中身は現在全てコメントアウトしています。)

以上です。説明不足で大変申し訳ないです。
引用返信 編集キー/
■22978 / inTopicNo.13)  Re[3]: DataGridでBooleanカラムにデータが格納されない
□投稿者/ てく (8回)-(2008/08/06(Wed) 16:14:55)
こんにちは。

前回の書き込みから色々試してみましたがおかしいところはみつかりません。

Fillの前後で行スタイルを参照してみましたが、やはり同一でした。
処理順序などはもとより、DBへの接続方法からSQL文、行スタイルまでが同一であるのに結果が違うことなんてあるのでしょうか…。

申し訳ありませんが、もう少しお力をお貸し願えないでしょうか…。
引用返信 編集キー/
■22984 / inTopicNo.14)  Re[4]: DataGridでBooleanカラムにデータが格納されない
□投稿者/ みきぬ (35回)-(2008/08/06(Wed) 16:56:34)
そういえば…

コード1より:
> sColumnName(0) = "No"

コード2より:
> clsDataGrid.AddColumn("chk", 40, GetType(Boolean), , False, False, "C")

あれ、列名が違う?
引用返信 編集キー/
■22986 / inTopicNo.15)  Re[5]: DataGridでBooleanカラムにデータが格納されない
□投稿者/ てく (9回)-(2008/08/06(Wed) 17:16:32)
みきぬ様

ありがとうございます。

> コード1より:
>>sColumnName(0) = "No"
>
> コード2より:
>>clsDataGrid.AddColumn("chk", 40, GetType(Boolean), , False, False, "C")
>
> あれ、列名が違う?

ああっ、そうですね!
SQLでは"SELECT 0 as No, "... としていましたので、列名と紐付かなかったんですね。
全てに合点が行きました。
言われてみれば単純なところでした。お恥ずかしい…。

直して実行したところ、上手く動作しました。
本当にありがとうございました。


アドバイスをくれた方々、見てくださった方々に、重ねてお礼申し上げます。
ありがとうございました。
解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -