質問者
データセットのコピー

質問
-
ドロップダウンの項目をデータベースから取ってくるような場合、
フォームを開くたびに、毎回データセットをFillするのを避ける為に、
アプリケーションの起動時に1回だけFillを行って、そのデータセットを
アプリケーションの終了時まで使いたいと思っています。
各フォーム上では、仮のデータセットをつくり、それに対して
データバインドをしています。
そしてフォームを開いた際に起動時にFillを行ったプロジェクト全体の
データセットを、各フォーム内のデータセットにコピーするのですが、
これが上手くいきません。
アプリケーションの起動時にFillしたデータセットをcommon.globalDataSetとし、
フォーム内のデータセットをmyDataSetとして、
this.myDataSet = common.globalDataSet;
としても、this.myDataSetにはcommon.globalDataSetの内容が上手くコピーされません。
これは何が問題でしょうか?解決方法はないものでしょうか。
すべての返信
-
提示のコードでは、コピーじゃなくて参照代入になってしまいますね。
ココ↓の「オブジェクトの作成」のところで、そのあたりが少し書いてあります。
http://msdn2.microsoft.com/ja-jp/library/x9afc042(VS.80).aspxこちら↓がそこらへん分かりやすいかも。
http://ufcpp.net/study/csharp/oo_reference.html#reftype -
参照代入で構いませんよ。
その方がメモリー消費も少ないです。この場合うまくいかないのはデータバインドを代入したDataSetに対してやっていないからでしょう。
this.textBox1.DataBindings.Clear();
this.textBox1.DataBindings.Add(new System.Windows.Forms.Binding("Text", this.ユーザーDataSet, "ユーザー.都道府県名", true));this.xxxBindingNavigator.BindingSource = this.ユーザーDataSet;
-
カスタムコントロールを作ってしまう手もあります。
public partial class 都道府県ComboBox : ComboBox
{
public 都道府県ComboBox()
{
InitializeComponent();
if (都道府県DataSet == null)
{
InitializeDataSet();
}
this.bindingSource.DataSource = 都道府県DataSet;
this.ValueMember = "都道府県.コード";
this.DisplayMember = "都道府県.都道府県名";
}
static private SampleApplication.Data.都道府県DataSet 都道府県DataSet = null;
static private SampleApplication.Data.都道府県DataSetTableAdapters.都道府県TableAdapter 都道府県TableAdapter;
private void InitializeDataSet()
{
都道府県DataSet = new SampleApplication.Data.都道府県DataSet();
都道府県TableAdapter = new SampleApplication.Data.都道府県DataSetTableAdapters.都道府県TableAdapter();
((System.ComponentModel.ISupportInitialize)(都道府県DataSet)).BeginInit();
都道府県DataSet.DataSetName = "都道府県DataSet";
都道府県DataSet.SchemaSerializationMode = System.Data.SchemaSerializationMode.IncludeSchema;
都道府県TableAdapter.ClearBeforeFill = true;
((System.ComponentModel.ISupportInitialize)(都道府県DataSet)).EndInit();
}
protected override void InitLayout()
{
base.InitLayout();
if (!this.DesignMode)
{
都道府県TableAdapter.Fill(都道府県DataSet.都道府県);
}
}
}