DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Datagridへのチェックボックス表示時における、初期値の設定

環境/言語:[環境(WindowsXP)使用言語(VB.NET)NET Frameworkのバージョン(1.1)]
分類:[.NET]

はじめまして。
.NET歴数ヶ月の超初心者です(>_<)

現在、DataGridにおいてチェックボックスを表示させる処理を作っています。
表示させること自体は、こちらの下記サイトを参考に作れました。
http://dobon.net/vb/dotnet/datagrid/boolcolumn.html

しかし…
最初に表示されるチェックボックスの値が半透明(「On」と「Off」の中間色)で表示されてしまいます。

大まかな処理内容は以下の通りです(若干省略しています)
(列スタイル)
Dim cs1 As New DataGridBoolColumn
Dim tb1 As CheckBox
cs1.HeaderText = fname1
cs1.AllowNull = False
(テーブル作成)
Dim dscls As DataSet
Dim dtcls As DataTable
Dim dccls As DataColumn
dscls = New DataSet(dtsetname)
dtcls = dscls.Tables.Add(tablename)
(構造)
dccls = dtcls.Columns.Add(fname1, GetType(Boolean))
dccls.DefaultValue = False
 …

よろしくお願いしますm(_)m
■No28177に返信(はるかあかりさんの記事)

dccls が該当項目を表しているということですか?
データテーブルへのデータの設定をどのように行っているかが
分からないので予測ですが多分NewRowをしないで
DataTableに追加する方法を行われているのではないでしょうか?
そうするとDefaultValueは働かないので読込元の情報が不足(Null)と
考えられます
■No28178に返信(shuさんの記事)
> ■No28177に返信(はるかあかりさんの記事)
>
> dccls が該当項目を表しているということですか?
> データテーブルへのデータの設定をどのように行っているかが
> 分からないので予測ですが多分NewRowをしないで
> DataTableに追加する方法を行われているのではないでしょうか?
> そうするとDefaultValueは働かないので読込元の情報が不足(Null)と
> 考えられます
>

ご意見ありがとうございます。
なにぶん当方が素人当然の中での追記ですが…

処理内容の続きとしまして…
@
dtcls.Rows.Add(New Object() _
{M1db.dtsetM1.Tables("M1db").Rows(i)("t_flag")})
ということをしています。
別途データセットに格納してあるデータを「i」の件数分表示しています。

A
その後…
DataGrid1.SetDataBinding(dscls, tablename)
を行っています。

ただし、別途データセットに格納してあるデータが1件もなければ@の処理は行っていません。
そこに問題があるのでしょうか??
■No28181に返信(はるかあかりさんの記事)

DataTableとDataGridの間のマッピングを忘れているとか?
■No28188に返信(shuさんの記事)
> ■No28181に返信(はるかあかりさんの記事)
>
> DataTableとDataGridの間のマッピングを忘れているとか?

マッピングしています(泣)

今まで記述してきた処理内容について省略してしまったところもあったので
整理して再度以下の通り記述し直します。(T_T)

======================================================
Private Sub datagrid_compilation()

   Dim i As Integer

'タブのタイトル表示
Dim dtsetname As String = "dblist"
Dim tablename As String = "t_list"

'テーブルスタイル編集のための変数一覧
Dim fname1 As String = "チェック"
Dim flen1 As Integer = 33

'テーブルスタイル作成
Dim ts As DataGridTableStyle
ts = New DataGridTableStyle
ts.MappingName = tablename
DataGrid1.TableStyles.Clear()
DataGrid1.TableStyles.Add(ts)
ts.AllowSorting = False

'列スタイル作成
ts.GridColumnStyles.Clear()
Dim cs1 As New DataGridBoolColumn
Dim tb1 As CheckBox
cs1.MappingName = fname1
cs1.HeaderText = fname1
cs1.Width = flen1
cs1.AllowNull = False
cs1.Alignment = HorizontalAlignment.Center
ts.GridColumnStyles.Add(cs1)

'テーブルの作成
Dim dscls As DataSet
Dim dtcls As DataTable
Dim dccls As DataColumn
dscls = New DataSet(dtsetname)
dtcls = dscls.Tables.Add(tablename)

'構造
dccls = dtcls.Columns.Add(fname1, GetType(Boolean))
dccls.DefaultValue = False

'画面の初期化
dtcls.Rows.Clear()

'テーブル内のデータ件数が最終になるまで繰り返す
'   (テーブルにデータがなければこの処理はされない)
For i = 0 To M13db.dtsetM13.Tables("M13minou").Rows.Count - 1
dtcls.Rows.Add(New Object() _
{M13db.dtsetM13.Tables("M13minou").Rows(i)("tNoufu_flag")})
Next

'テキスト名の表示
DataGrid1().CaptionText() = "一覧表"

'データの追加
DataGrid1.SetDataBinding(dscls, tablename)

======================================================
■No28191に返信(はるかあかりさんの記事)

> For i = 0 To M13db.dtsetM13.Tables("M13minou").Rows.Count - 1
> dtcls.Rows.Add(New Object() _
> {M13db.dtsetM13.Tables("M13minou").Rows(i)("tNoufu_flag")})
> Next
この後に
dtcls.AcceptChanges
を入れてみるとどうなります?
dtclsの中身も確認してみるとよいです。
■No28192に返信(shuさんの記事)
> ■No28191に返信(はるかあかりさんの記事)
>
>>For i = 0 To M13db.dtsetM13.Tables("M13minou").Rows.Count - 1
>> dtcls.Rows.Add(New Object() _
>> {M13db.dtsetM13.Tables("M13minou").Rows(i)("tNoufu_flag")})
>>Next
> この後に
> dtcls.AcceptChanges
> を入れてみるとどうなります?

状況変わらずですね(*_*)

> dtclsの中身も確認してみるとよいです。

何をどのように確認するのがよいのでしょうか?
■No28197に返信(はるかあかりさんの記事)

Dim row as datarow

For each row in dtcls.Rows
if row.IsNull(fname1) then
Console.WriteLine("Null")
else
    Console.WriteLine(row(fname1).ToString)
end if
Next

これで出力ウィンドウ(設定によりイミディエイトウィンドウ)に内容が
出るので確認するといいです。
Console=>Debugに変更するとデバッグ起動時イミディエイトウィンドウに
出力されます。
何から何までありがとうございます。m(_)m

とりあえず流したところ…
DBがない(テーブルにデータがない)場合はNullが帰ってきました(*_*)

DBが存在する(テーブルにデータが存在する)ものについては「True」「False」がしっかり入っていました。

さてさて…どうしよーかなー!(ヤケ気味)
■No28199に返信(はるかあかりさんの記事)

> とりあえず流したところ…
> DBがない(テーブルにデータがない)場合はNullが帰ってきました(*_*)
このときはチェックはONでもOFFでもないですね。


> DBが存在する(テーブルにデータが存在する)ものについては「True」「False」がしっかり入っていました。
>
このときにも駄目ですか?とするとやはりマッピング部分の気がします。

DOBON.NET | プログラミング道 | プログラミング掲示板