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

わんくま同盟

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

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


(過去ログ 43 を表示中)
■22840 / )  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
返信 編集キー/


管理者用

- Child Tree -