DataGridViewへの行の追加について
- 題名: DataGridViewへの行の追加について
- 著者: KORO
- 日時: 2007/11/20 19:55:28
- ID: 21032
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: DataGridViewへの行の追加について
- 著者: KORO
- 日時: 2007/11/21 11:04:11
- ID: 21034
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: 【報告】この投稿はマルチポストです
- 著者: (報告)
- 日時: 2007/11/22 0:01:47
- ID: 21036
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: 【報告】この投稿はマルチポストです
- 著者: KORO
- 日時: 2007/11/22 9:13:19
- ID: 21038
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
Acccessデータベースとの連携プログラム作成初心者です。過去ログに同様な記事があったのですが、意味が分からず、途方に暮れています。
やりたいことは、AccessのテーブルとリンクしているDataGridViewに新しい行のデータを挿入し、またその結果をAccessに反映したいのですがうまくいきません。DataGridView.Rows.Add()を発行すると、以下のエラーとなってしまいます。
「コントロールがデータバインドされているとき、DataGridView の行コレクションにプログラムで行を追加することはできません。」
そもそもDataGridViewはプログラムで行を増やしたり、内容を書き換えたりすることはできないのでしょうか?コントロールがデータバインドされているとはどういう意味なのでしょうか?過去ログでは、「バインドしているデータソースに対して行を追加してください。」とありましたが、まったく意味がわかりません。参考までに見にくく汚いプログラムですが私の書いたものを載せておきます。
どうかどなたかご教授のほどをよろしくお願いいたします。
---------------------------------------------------------------------------
DataSet dtSet;
OleDbDataAdapter dAdapter;
//-------------------------------------------------------------------------
// フォームロード時の処理を行うルーチン
//-------------------------------------------------------------------------
private void FrmSyaryou_Load(object sender, EventArgs e) {
//-------------------------------------------------------------------------
// 表示するグリッド幅をDataGridViewの幅いっぱいまで広げる
//-------------------------------------------------------------------------
dGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
//-------------------------------------------------------------------------
// 列を追加表示する
//-------------------------------------------------------------------------
dGridView.Columns.Clear();
dGridView.Columns.Add("区分", "区分");
//-------------------------------------------------------------------------
// 接続文字列の生成とコネクションの生成
//-------------------------------------------------------------------------
String connString =
"Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + sb.ToString() + "\\利用中止車両データ.mdb";/* +
"Initial Catalog=利用中止車両データ.mdb";*/
OleDbConnection dbConnect = new OleDbConnection(connString);
try {
//-------------------------------------------------------------------------
// DBからのデータの読み出しとグリッドへの表示
//-------------------------------------------------------------------------
OleDbCommand dbCommand = new OleDbCommand();
//-------------------------------------------------------------------------
// コネクションのOleDbCommandオブジェクトへの設定
//-------------------------------------------------------------------------
dbCommand.Connection = dbConnect;
//-------------------------------------------------------------------------
// データセットを生成しOleDbDataAdapterのSelectCommandプロパティにSQL文を設定する
//-------------------------------------------------------------------------
dtSet = new DataSet("利用中止車両データ");
dAdapter = new OleDbDataAdapter("SELECT 機種, 型式, 機番 FROM 利用中止車両データ", dbConnect);
//-------------------------------------------------------------------------
// コネクションのオープン
//-------------------------------------------------------------------------
dbConnect.Open();
//-------------------------------------------------------------------------
// データセットにデータを取得する
//-------------------------------------------------------------------------
dAdapter.Fill(dtSet, "利用中止車両データ");
//-------------------------------------------------------------------------
// DataGridViewのデータソースにデータを表示
//-------------------------------------------------------------------------
dGridView.DataSource = dtSet.Tables[0];
//-------------------------------------------------------------------------
// 列の幅を調節し、各列の値を読み取り専用に設定する
//-------------------------------------------------------------------------
dGridView.Columns[0].Width = 60;
dGridView.Columns["区分"].ReadOnly = true;
dGridView.Columns["機種"].ReadOnly = true;
dGridView.Columns["型式"].ReadOnly = true;
dGridView.Columns["機番"].ReadOnly = true;
//-------------------------------------------------------------------------
// DataGridViewのセルを選択することで行全体が選択されるようにする
//-------------------------------------------------------------------------
dGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
//-------------------------------------------------------------------------
// DataGridViewで複数行が選択できないようにする
//-------------------------------------------------------------------------
dGridView.MultiSelect = false;
//-------------------------------------------------------------------------
// 奇数行の背景色にLightBlueを指定
//-------------------------------------------------------------------------
dGridView.AlternatingRowsDefaultCellStyle.BackColor = Color.LightBlue;
//-------------------------------------------------------------------------
// テキストボックスに文字入力時のIMEModeをOFF固定にする
//-------------------------------------------------------------------------
ctxtKisyu.ImeMode = ImeMode.Off;
ctxtKatashiki.ImeMode = ImeMode.Off;
ctxtKiban.ImeMode = ImeMode.Off;
//-------------------------------------------------------------------------
// SQL文の設定
//-------------------------------------------------------------------------
dbCommand.CommandText = "SELECT 機種, 型式, 機番 FROM 利用中止車両データ";
//-------------------------------------------------------------------------
// Accessデータベースから1列ごとにデータを取得する
//-------------------------------------------------------------------------
OleDbDataReader reader = dbCommand.ExecuteReader();
int counter = 0;
while (reader.Read()) {
counter++;
}
//-------------------------------------------------------------------------
// ラベルを3桁毎のカンマ区切りで表示するためにToString()に引数をつける
//-------------------------------------------------------------------------
lblDataKensuu.Text = "データ件数:" + counter.ToString("#,#") + "件";
}
catch (Exception equery) {
MessageBox.Show(equery.Message);
dbConnect.Close();
}
}
private void cmdAdd_Click(object sender, EventArgs e)
{
try {
dGridView.DataSource = dGridView.Rows.Add(ctxtKisyu.Text, ctxtKatashiki.Text, ctxtKiban.Text);
dAdapter.Update(dtSet, "利用中止車両データ");
}
catch (Exception ecmdaddclick) {
MessageBox.Show(ecmdaddclick.Message);
}
}