■87114 |
Re[5]: datagridviewからxmlへの出力について |
□投稿者/ WebSurfer -(2018/04/12(Thu) 12:11:49)
| ■No87106 (kaz さん) に返信
すでに解決済みになってますが・・・ > 状況を整理すると > xmlから読み込んだデータをDataGridViewに表示した際 > チェックボックスが未チェックになるのは2パターンあって > 【1】元のxmlで要素がfalseの時 > 【2】元のxmlで要素が存在しない(DBNull)の時
ちょっと違うかと。
データベースでは列に NULL 可/不可というのを設定できます。NULL 可に設定されている場合 xml 上で NULL を表すのが既定では要素が存在しないということになるそうです。
NULL 値が含まれる列の既定動作 https://docs.microsoft.com/ja-jp/sql/relational-databases/xml/columns-that-contain-a-null-value-by-default
データベースである列の型が bit(DataGridView 上でチェックボックスになる)で NULL 可の場合、 true, false, NULL の 3 つの値を取ることができます。xml 上では既定では以下のようになるはず です。
true: <checked>true</checked> false: <checked>false</checked> NULL: 要素は存在しない
> 【1】であれば、当然書き出したxmlでも正しくfalseが存在する > 【2】のときは、書き出したxmlでも要素が欠けた状態になる
自分の環境で試した Products テーブルの Discontiued 列(データ型は bit で NULL 不可)の場合、 前者はその通りです。後者は違います(欠けることはなくて true / false いずれかになります)。
> WebSurfer さんにご提示頂いたやり方で > 元のxmlファイルに欠けた要素がある(例えば、チェックボックスに対応する要素が存在せずDBNullである場合)でも > 書き出したxmlファイルでは、その要素はfalseとして存在しますでしょうか?
上にも書きましたように、自分が試した Products テーブルの Discontiued 列は NULL 不可なので、 xml 上では必ず要素が存在します。
xml のスキーマで NULL 可を表すのが minOccurs="0" のようですので(ちょっと自信なし)、試しに、 Products テーブルの Discontiued 列(データ型は bit で NULL 不可)から生成したスキーマを以下の ようにして、xml の Discontiued 要素を削除して試してみました。
<xs:element name="Discontinued" type="app1:bit" /> ↓ <xs:element name="Discontinued" type="app1:bit" minOccurs="0" />
その xml ファイルから DataSet / DataTable を生成すると、DataTable 上の当該要素は DBNull.Value になります。
DataSet / DataTable を DataGridView に表示すると当該要素(DBNull.Value の)は空のチェックボ ックスになります。
チェックを入れて xml ファイルを更新すると <Discontinued>true</Discontinued> になります。
チェックを外して xml ファイルを更新すると <Discontinued>false</Discontinued> になります(要素 は先所されません)。
ご参考まで。 |
|