10

DBのテーブルのDataSetで作成されたDataGridViewがあります。行を削除すると、データベースで更新されますが、GridViewから削除されません。アプリケーションを再起動した場合にのみ、GridViewから削除されます。

助けてください

4

5 に答える 5

18

バインディングソースのバインディングをリセットする必要があります。

bindingSource.ResetBindings(false);
于 2012-11-05T12:02:51.700 に答える
9

これは非常に単純なプロセスです。

1.)バインディングソースを作成する

2.)このオブジェクトのデータソースをデータセットテーブルに設定します。

3.)DatagridViewのデータソースをバインディングソースオブジェクトとして設定します。

コード例:

Dataset ds = new Dataset();
BindingSource bs = new BindingSource()
bs.Datasource = ds.Table[0];
DatagridView.Datasource = bs;

これで、DataTableで行った変更はすべて、GridViewに自動的に波及します。

于 2012-11-05T12:11:39.930 に答える
0

これがお役に立てば幸いです。

テーブルを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データベースを使用していることに気付くでしょうが、気にしないでください。

于 2012-11-05T11:42:25.500 に答える
0

データベースが更新され、DataGridViewを更新する場合は、次のように呼び出します。

this.<table name>TableAdapter.Fill(this.<DB name>DataSet.<table name>);

例:はテーブルの名前(たとえばCustomers)であり、はデータベースの名前(たとえばMyDB)です。

this.CustomersTableAdapter.Fill(this.MyDBDataSet.Customers);
于 2014-04-10T19:09:31.353 に答える
-3

削除するたびにこの関数を呼び出す必要があります(グリッドの再バインド)。

void BindGrid()
{
YourDataGridView.DataSource = dataset;
YourDataGridView.DataBind();
}
于 2012-11-05T11:44:30.103 に答える