DOBON.NETプログラミング掲示板過去ログ
MySqlDataAdapterの更新処理について
題名: MySqlDataAdapterの更新処理について
著者: よしよし
日時: 2010/09/19 17:06:51
ID: 27329
この記事の返信元:
(なし)
この記事への返信:
[27379]
Re[1]: MySqlDataAdapterの更新処理について
藍
2010/09/30 2:54:43
ツリーを表示
環境/言語:[WindowsXP .NET]
分類:[.NET]
こんばんは。
よしよしと申します。
MySqlDataAdapterの更新処理についてお聞きしたいのですが、以下ソースを載せます。
ConnecterMySqlクラス
//データアダプタ宣言
private MySqlDataAdapter da;
//テーブルからデータを取得する
public bool TableReader(string select_sql, DataTable datatable)
{
da = new MySqlDataAdapter(select_sql, conn);
try
{
da.Fill(datatable);
}
catch (MySqlException ex)
{
MessageBox.Show("データ取得に失敗しました\n" + ex.Message);
return false;
}
return true;
}
上記にて、daにSelect文を格納し、同時に、da.Fill(datatable)でdatatableに結果を格納しました。
呼び出し側の処理は
DataTable dt_m_mondai = new DataTable();
Connector cn_m_mondai = new Connector(); //db m_kokyaku用コネクタ宣言
//dataGridView1読み込み
cn_m_mondai.TableReader("select * from m_mondai", dt_m_mondai);
dataGridView1.DataSource = dt_m_mondai;
dataGridView1にDataTableをセットする。ここまでは正常におこなえました。
次に、データベースの更新処理をおこないました。(データベースの更新は正常に行えました)
しかし、そのままでは、dataGridViewの内容が切り替わらないため、DataTable更新のために、下記処理を行いました。
public bool UpdateDataTable(DataTable datatable)
{
try
{
da.Fill(datatable);
}
catch(MySqlException ex)
{
MessageBox.Show("更新処理に失敗しました\n" + ex.Message);
return false;
}
return true;
}
ConnecterMySqlクラス内にて daは、共通変数として宣言。(先ほどのSelect文が格納)
da.Fill(datatable); にて、datatabelの内容を更新。
この状態でデータベース上の、値が変更されておれば、datatableの内容も変わると思うのですが、初期取得状態(TableReaderの状態)のままなのです。
(DBの値の変更は確認しました)
MSDNでは、”DataTable 名を使用して、データ ソース内の行と一致するように、DataSet 内の指定した範囲の行を追加または更新します。”
とあるのですが、意中の結果が得られませんでしたので、
datatable.Clear();
da.Fill(datatable);
と変えて、一旦datatableを空にし、再度読み込むという方法に変えたところ一応上手くいきました。
ところが、dataGridViewのカーソル位置を、復元するために
DataGridViewCell CurrentCell; と宣言し
CurrentCell = dataGridView1.CurrentCell; (更新前に、現在カーソル位置を保存)(この内容は正常(デバックで確認しました))
更新後に、
dataGridView1.Focus();
dataGridView1.CurrentCell = CurrentCell;
としたところ、変数 CurrentCell が不正値 (RowIndex=-1)になってしまいます。
datatable.Clear();を外すと、正常にCurrentCellが復元されるため
どうにも困っています。
何かいい手はないものでしょうか?
題名: Re[1]: MySqlDataAdapterの更新処理について
著者: 藍
日時: 2010/09/30 2:54:43
ID: 27379
この記事の返信元:
[27329]
MySqlDataAdapterの更新処理について
よしよし
2010/09/19 17:06:51
この記事への返信:
(なし)
ツリーを表示
> ところが、dataGridViewのカーソル位置を、復元するために
> DataGridViewCell CurrentCell; と宣言し
> CurrentCell = dataGridView1.CurrentCell; (更新前に、現在カーソル位置を保存)(この内容は正常(デバックで確認しました))
>
> 更新後に、
> dataGridView1.Focus();
> dataGridView1.CurrentCell = CurrentCell;
> としたところ、変数 CurrentCell が不正値 (RowIndex=-1)になってしまいます。
CurrentCellではなく、CurrentCellのRowIndex,とColumnIndexを取り出しておき、
RowIndex,とColumnIndexでカーソル位置を再設定する必要があると思います。
CurrentCellは、値型ではなく参照型のはずなので、参照元のdataGridViewを読み直した場合
CurrentCellも初期化されるのだと思います。
DOBON.NET
|
プログラミング道
|
プログラミング掲示板
分類:[.NET]
こんばんは。
よしよしと申します。
MySqlDataAdapterの更新処理についてお聞きしたいのですが、以下ソースを載せます。
ConnecterMySqlクラス
//データアダプタ宣言
private MySqlDataAdapter da;
//テーブルからデータを取得する
public bool TableReader(string select_sql, DataTable datatable)
{
da = new MySqlDataAdapter(select_sql, conn);
try
{
da.Fill(datatable);
}
catch (MySqlException ex)
{
MessageBox.Show("データ取得に失敗しました\n" + ex.Message);
return false;
}
return true;
}
上記にて、daにSelect文を格納し、同時に、da.Fill(datatable)でdatatableに結果を格納しました。
呼び出し側の処理は
DataTable dt_m_mondai = new DataTable();
Connector cn_m_mondai = new Connector(); //db m_kokyaku用コネクタ宣言
//dataGridView1読み込み
cn_m_mondai.TableReader("select * from m_mondai", dt_m_mondai);
dataGridView1.DataSource = dt_m_mondai;
dataGridView1にDataTableをセットする。ここまでは正常におこなえました。
次に、データベースの更新処理をおこないました。(データベースの更新は正常に行えました)
しかし、そのままでは、dataGridViewの内容が切り替わらないため、DataTable更新のために、下記処理を行いました。
public bool UpdateDataTable(DataTable datatable)
{
try
{
da.Fill(datatable);
}
catch(MySqlException ex)
{
MessageBox.Show("更新処理に失敗しました\n" + ex.Message);
return false;
}
return true;
}
ConnecterMySqlクラス内にて daは、共通変数として宣言。(先ほどのSelect文が格納)
da.Fill(datatable); にて、datatabelの内容を更新。
この状態でデータベース上の、値が変更されておれば、datatableの内容も変わると思うのですが、初期取得状態(TableReaderの状態)のままなのです。
(DBの値の変更は確認しました)
MSDNでは、”DataTable 名を使用して、データ ソース内の行と一致するように、DataSet 内の指定した範囲の行を追加または更新します。”
とあるのですが、意中の結果が得られませんでしたので、
datatable.Clear();
da.Fill(datatable);
と変えて、一旦datatableを空にし、再度読み込むという方法に変えたところ一応上手くいきました。
ところが、dataGridViewのカーソル位置を、復元するために
DataGridViewCell CurrentCell; と宣言し
CurrentCell = dataGridView1.CurrentCell; (更新前に、現在カーソル位置を保存)(この内容は正常(デバックで確認しました))
更新後に、
dataGridView1.Focus();
dataGridView1.CurrentCell = CurrentCell;
としたところ、変数 CurrentCell が不正値 (RowIndex=-1)になってしまいます。
datatable.Clear();を外すと、正常にCurrentCellが復元されるため
どうにも困っています。
何かいい手はないものでしょうか?