|
分類:[C#]
データグリッドビューの再表示についてアドバイスお願いしますm(_ _)m 言語はC#で始めに長文になってしまいましてm(_ _)m 実現したい内容としましては、Form1にて編集したいデータをダブルクリックし、 Form2の編集画面に選択されたデータを表示します。 ここまでは、完成しているのですが問題はこれからでしてForm2で編集され更新されたデータを、 Form1のデータグリッドビューに再表示させたいのですが今の状態だとForm2で編集され更新されたデータが、 Form1へ画面が移るとデータグリッドビューのデータが更新されてなく、 バインディングナビゲーターのセーブアイコンを押さないとデータが更新されないコードになっています。
Form2で編集されたデータをForm1で編集更新されデータを再表示させるには、 どのように実現またはコードを追加してあげれば良いのでしょうか?
何となくではありますが、Form1のロードイベントでデータグリッドビューのデータをクリアして、 再び再表示させてあげれば良いのかなって漠然な考えしか浮かばずなかなか思うように進まないので、 よろしくお願いしますm(_ _)m
※Form1のコード using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
namespace WindowsApplication2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } // 検索のためのフィルタ public string Filter;
private void addresstureTable_1BindingNavigatorSaveItem_Click(object sender, EventArgs e) { this.Validate(); this.addresstureTable_1BindingSource.EndEdit(); this.addresstureTable_1TableAdapter.Update(this.addresstureWorksDataSet.AddresstureTable_1);
}
private void Form1_Load(object sender, EventArgs e) { // TODO: このコード行はデータを 'addresstureWorksDataSet.AddresstureTable_1' テーブルに読み込みます。必要に応じて移動、または削除をしてください。 this.addresstureTable_1TableAdapter.Fill(this.addresstureWorksDataSet.AddresstureTable_1);
}
private void ButtonSearch_Click(object sender, EventArgs e) { // 検索ダイアログボックスのインスタンスを作成する SearchDialog search = new SearchDialog(); // 検索ダイアログボックスを作成する DialogResult ret = search.ShowDialog(); // [検索]ボタンがクリックされたら検索を行う if (ret == DialogResult.OK) { // フィルタを設定する addresstureTable_1BindingSource.Filter = search.Filter; } } // データグリッドビューのDataErrorイベント処理 private void addresstureTable_1DataGridView_DataError(object sender, DataGridViewDataErrorEventArgs e) { int row = addresstureTable_1DataGridView.CurrentCell.RowIndex + 1; int col = addresstureTable_1DataGridView.CurrentCell.ColumnIndex + 1; MessageBox.Show(row.ToString() + "行" + col.ToString() + "列の入力を確認してください。", "データ入力エラー", MessageBoxButtons.OK, MessageBoxIcon.Warning); }
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { // ナビゲーターのセーブアイコンをクリックして、プロパティのNameを参照 addresstureTable_1BindingNavigatorSaveItem_Click(null, null); } // 検索ボタン押下処理 private void button_Search_Click(object sender, EventArgs e) { // 検索ダイアログボックスのインスタンスを作成する // SearchDialog.csのインスタンス SearchDialog search = new SearchDialog(); // 検索ダイアログボックスを作成する DialogResult ret = search.ShowDialog(); // [検索]ボタンがクリックされたら検索を行う if (ret == DialogResult.OK) { // フィルタを設定する // SearchDialog.csのインスタンス(search)の検索条件Filterを // addresstureTable_1BindingSource.Filterの代入している。 addresstureTable_1BindingSource.Filter = search.Filter; } } // 閉じちゃいなよボタン押下処理 private void button_Close_Click(object sender, EventArgs e) { Application.Exit(); }
private void addresstureTable_1DataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e) { // 単票形式のインスタンスを作成する Form2 tForm = new Form2(); // 単票形式のダイアログボックスを作成する DialogResult tret = tForm.ShowDialog(); }
private void addresstureTable_1DataGridView_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e) { DataRowView row = (DataRowView)addresstureTable_1DataGridView.Rows[e.RowIndex].DataBoundItem; //DataRowView row = addresstureTable_1DataGridView.Rows[e.RowIndex].DataBoundItem as DataRowView; //DataRowView row = addresstureTable_1DataGridView.Rows[e.RowIndex].Cells[0].Value.ToString(); // 単票形式のインスタンスを作成する Form2 tForm = new Form2(); tForm.Row = row; // 単票形式のダイアログボックスを作成する DialogResult tret = tForm.ShowDialog(); } public void UpdateData() { try { this.Validate(); this.addresstureTable_1BindingSource.EndEdit(); this.addresstureTable_1TableAdapter.Update(this.addresstureWorksDataSet.AddresstureTable_1); MessageBox.Show("更新しました!"); } catch (System.Exception ex) { MessageBox.Show("更新を失敗しました"); } } public void reLoad() { this.addresstureTable_1TableAdapter.Fill(this.addresstureWorksDataSet.AddresstureTable_1); } } }
Form2のコード using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms;
namespace WindowsApplication1 { public partial class Form2 : Form { public Form2() { InitializeComponent(); } // 選択した行の値を受け渡すフィールド private DataRowView row;
public DataRowView Row { get { return this.row; } set { this.row = value; } } // セーブアイコン押下処理 private void addresstureTable_1BindingNavigatorSaveItem_Click(object sender, EventArgs e) { this.Validate(); Form1 addForm = new Form1(); addForm.UpdateData(); addForm.reLoad(); //this.addresstureTable_1BindingSource.EndEdit(); //this.addresstureTable_1TableAdapter.Update(this.addresstureWorksDataSet.AddresstureTable_1);
}
private void Form2_Load(object sender, EventArgs e) { this.customerIDTextBox.DataBindings.Add(new Binding("Text", this.row, "CustomerID")); this.customerNameTextBox.DataBindings.Add(new Binding("Text", this.row, "CustomerName")); this.zipCodeTextBox.DataBindings.Add(new Binding("Text", this.row, "ZipCode")); this.customerAddressTextBox.DataBindings.Add(new Binding("Text", this.row, "CustomerAddress")); this.telTextBox.DataBindings.Add(new Binding("Text", this.row, "tel"));
}
private void UpdateClose_Click(object sender, EventArgs e) { // フォームを閉じる this.Close(); }
private void Form2_FormClosing(object sender, FormClosingEventArgs e) { // ナビゲーターのセーブアイコンをクリックして、プロパティのNameを参照 addresstureTable_1BindingNavigatorSaveItem_Click(null, null); } } }
|