- PR -

フォーム情報の保存

投稿者投稿内容
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-02-17 18:34
XMLへチェックBOXの内容を保存してみました。
ユーザIDを一意にして、同じIDがあれば上書き、
なければ追加を行いたいです。
しかし、毎回全て上書きになってしまいます。
保存方法自体に問題があるのでしょうか。

データセット=DS
コード:
DataTable dt = new DataTable("xmlDt");
DataColumn dtCol = dt.Column.Add("Uid", typeof(string));
dtCol.AllowDBNull = false;
dtCol.Unique = true;

dt.Columns.Add("Check1",typeof(bool));
dt.Columns.Add("Check2",typeof(bool));

DataRow dtRow = dt.NewRow();
dtRow["Uid"] = Session["USERID"].ToString();
dtRow["Check1"] = Check1_state;
dtRow["Check2"] = Check2_state;

dt.Rows.Add(dtRow);
DS.Tables.Add(dt);
DS.WriteXml(パス);



宜しくお願い致します。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2004-02-18 09:36
引用:

しかし、毎回全て上書きになってしまいます。
保存方法自体に問題があるのでしょうか。



今のままだと新規にデータセットを構築して最新のチェックボックスの状態を設定した上で
XMLに上書きしている状態ですね

データセット=DS
コード:

DataTable dt = new DataTable("xmlDt");
DataColumn dtCol = dt.Column.Add("Uid", typeof(string));
dtCol.AllowDBNull = false;
dtCol.Unique = true;

dt.Columns.Add("Check1",typeof(bool));
dt.Columns.Add("Check2",typeof(bool));

DS.Tables.Add(dt);

// 既存のデータを読み込む
DS.ReadXml(パス);

// IDを取得
string uid = Session["USERID"].ToString();

// 同じIDが存在するかチェック
string filter = string.Format( "Uid={0}", uid );
DataRow[] dtRows = dt.Select( filter );

// 同じIDのデータが検索された場合
if( dtRows.Count > 0 ) {
dtRows[0]["Check1"] = Check1_state;
dtRows[0]["Check2"] = Check2_state;
}
// 同じIDのデータが検索されなかった場合
else {
// 新規行を追加
DataRow dtRow = dt.NewRow();
dtRow["Uid"] = uid;
dtRow["Check1"] = Check1_state;
dtRow["Check2"] = Check2_state;
dt.Rows.Add(dtRow);
}

// データセットを保存
DS.WriteXml(パス);



ちなみにDataSetはデザイナで作成した専用のDataSetのほうが扱い楽ですよ
コード:

// データセットを作成
DataSet1 ds = new DataSet1();

// 既存のデータを読み込む
ds.ReadXml(パス);

// IDを取得
string uid = Session["USERID"].ToString();

// 同じIDが存在するかチェック
DataSet1.xmlDtRow dtRow = ds.xmlDt.FindByUid( uid );



xmlDtテーブルクラス
FindByUidメソッド
xmlDtRowクラス
などが自動的に作成されます




[ メッセージ編集済み 編集者: ゆうじゅん 編集日時 2004-02-18 10:52 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-02-18 10:46
引用:

BB.NKさんの書き込み (2004-02-17 18:34) より:

XMLへチェックBOXの内容を保存してみました。
ユーザIDを一意にして、同じIDがあれば上書き、
なければ追加を行いたいです。
しかし、毎回全て上書きになってしまいます。
保存方法自体に問題があるのでしょうか。


 テーブルが上書き?それともファイルが上書き?
 「ファイルを追加出力」は、XmlWriteを使うならできないですよ?中ではそんな制御していないでしょうから。
 データテーブルの方は、上書きというより、「追加」になっているような?
BB.NK
大ベテラン
会議室デビュー日: 2004/02/05
投稿数: 138
投稿日時: 2004-02-18 14:20
当初考えていたものは、ファイルの上書きでした。
しかし、ゆうじゅんさんの方法で、
XMLファイルの読込み→追加、上書き→書込み
の処理でやりたいことはできそうです。

書込みをいただく前に、自分ではユーザごとのXMLファイルを作成して
(ファイル名=ユーザ名.xmlなど)
似たようなことを行わせていました。
これでも良いのですが、ユーザ数(2,30を想定)のファイルが出来てしまいますね。。。

スキルアップ/キャリアアップ(JOB@IT)