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

わんくま同盟

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

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


■87102 / )  Re[2]: datagridviewからxmlへの出力について
□投稿者/ kaz (6回)-(2018/04/11(Wed) 22:09:05)
その後、色々試してみて
まだ部分的に切り出した実験コードレベルですが
質問で意図した動作はほぼ達成出来たと思われます

・型付データセットを作成
・必要な列を追加
・DefaultValueをString列はString.Empty、Boolean列はfalseに設定・・・(※1)
・スキーマを含めずWriteXmlで書き出す前に以下のようにDBNullを空文字やfalseに置換・・・(※2)


            for (int i = 0; i <= ds.Tables[0].Columns.Count - 1; i++)
            {
                for (int j = 0; j <= ds.Tables[0].Rows.Count - 1; j++)
                {
                    if (ds.Tables[0].Columns[i].DataType.ToString() == "System.String")
                    {
                        if (ds.Tables[0].Rows[j][i] == DBNull.Value)
                        {
                            ds.Tables[0].Rows[j][i] = String.Empty;
                        }
                    }

                    if (ds.Tables[0].Columns[i].DataType.ToString() == "System.Boolean")
                    {
                        if (ds.Tables[0].Rows[j][i] == DBNull.Value)
                        {
                            ds.Tables[0].Rows[j][i] = false;
                        }
                    }
                }
            }



この手順で、
読み込むxmlに抜けた要素がある場合も
DataGridViewを手書き/コードから編集、あるいは新規行を追加した場合も
目的の動作になることを確認しました

動作自体はうまくいったのですが
少々疑問に思う所もありまして

※1は、コード中で以下のように初期値を設定しているのですが
ds.Tables[0].Columns["Name"].DefaultValue = String.Empty;

同じことを型付データセットを作るデザイナーのプロパティから
設定する方法はあるのでしょうか?
String.Empty,、<String.Empty>など試してみましたが
空文字にならず、そのままString.Emptyや<String.Empty>という文字列がDataGridViewに表示されてしまいました
コードから設定すれば済む事ですが、気になったので

※2は、
列の型判定についてです
最初、以下のコードで型判定できると思ったのですが
if (ds.Tables[0].Columns[i].DataType is System.String)

VisualStudioのエディターで緑波線がついて
「式は指定された型’string’ではありません」
とあり、実際に正しく判定されませんでした
それで、ToString()でキャストした後、文字列として判定する方法に変更した所うまくいきました
最初のコードがダメな理由がわかりません



■No87091 (WebSurfer さん) に返信
> (1) SQL Server の Microsoft のサンプルデータベースの Northwind の Products テーブルか
>   ら以下のクエリを使ってインラインスキーマ付きの xml を生成。

すいません、この手順がわからないのですが
これはVisualStudioで行う操作なのでしょうか?
SQLは全く触ったことが無いもので・・・

返信 編集キー/


管理者用

- Child Tree -