DBのテーブルのDataSetで作成されたDataGridViewがあります。行を削除すると、データベースで更新されますが、GridViewから削除されません。アプリケーションを再起動した場合にのみ、GridViewから削除されます。
助けてください
バインディングソースのバインディングをリセットする必要があります。
bindingSource.ResetBindings(false);
これは非常に単純なプロセスです。
1.)バインディングソースを作成する
2.)このオブジェクトのデータソースをデータセットテーブルに設定します。
3.)DatagridViewのデータソースをバインディングソースオブジェクトとして設定します。
コード例:
Dataset ds = new Dataset();
BindingSource bs = new BindingSource()
bs.Datasource = ds.Table[0];
DatagridView.Datasource = bs;
これで、DataTableで行った変更はすべて、GridViewに自動的に波及します。
これがお役に立てば幸いです。
テーブルをdgvで表示していて、そのテーブルから何かを削除する場合は、勝利フォームにボタンがあります。たとえばIDを選択し、[削除]ボタンをクリックしてデータベーステーブルからアイテムを削除します。そのコードは次のとおりです。
private void btn_Delete_Click(object sender, EventArgs e)
{
int selectedCellCount = dgv.GetCellCount(DataGridViewElementStates.Selected);
if (selectedCellCount > 0)
{
string selection;
for (int i = 0; i < selectedCellCount; i++)
{
selection = dgv.SelectedCells[i].Value.ToString();
string qs_delete = "DELETE FROM yor_table WHERE id = '" + selection + "';";
try
{
conn = new MySqlConnection(cs);
conn.Open();
cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandText = qs_delete;
cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (conn != null) conn.Close();
}
}
}
//don't forget to load your table again in dgv
string qs_select = "SELECT * FROM your_table";
System.Data.DataTable dataTable = new System.Data.DataTable();
dataTable.Clear();
dgv.DataSource = dataTable;
try
{
conn = new MySqlConnection(cs);
cmd = new MySqlCommand(qs_select, conn);
conn.Open();
da = new MySqlDataAdapter(cmd);
da.Fill(dataTable);
cb = new MySqlCommandBuilder(da);
dgv.DataSource = dataTable;
dgv.DataMember = dataTable.TableName;
dgv.AutoResizeColumns();
conn.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
if (conn != null) conn.Close();
}
}
ここで、MySQLデータベースを使用していることに気付くでしょうが、気にしないでください。
データベースが更新され、DataGridViewを更新する場合は、次のように呼び出します。
this.<table name>TableAdapter.Fill(this.<DB name>DataSet.<table name>);
例:はテーブルの名前(たとえばCustomers)であり、はデータベースの名前(たとえばMyDB)です。
this.CustomersTableAdapter.Fill(this.MyDBDataSet.Customers);
削除するたびにこの関数を呼び出す必要があります(グリッドの再バインド)。
void BindGrid()
{
YourDataGridView.DataSource = dataset;
YourDataGridView.DataBind();
}