0

私のコンボボックスにはウェイターの名前が含まれています。選択したウェイターにテーブルを割り当てると、ステータスは true になりますが、コンボボックスの項目は変わりません。

programming on page_load:---

private void frmTableAllotment_Load(object sender, EventArgs e)
        {

        dtTmPkr.Value = System.DateTime.Now;

        cmd = new SqlCommand("Select name from waiterentry2 where status='false'", con);
        con.Open();
        dr = cmd.ExecuteReader();
        while (dr.Read())
        {

            cmbWaiter.Items.Add(dr["name"]);

        }

        dr.Close();
        cmd = null;
        con.Close();

    }

割り当てボタンのウェイター status= true の保存ボタンのコーディング:

 private void btnAllocate_Click(object sender, EventArgs e)
 {
          cmd = new SqlCommand("update  waiterentry2 set status='true'  where name=@name", con);
          cmd.Parameters.AddWithValue("name", dgvDetails.Rows[i].Cells[0].Value);
          cmd.ExecuteNonQuery();
          con.Close();
 }
4

2 に答える 2

0

問題は、データベースを変更した後、コンボボックスのデータバインディングを更新または再読み込みしていないことです。

以下のようにコードをリファクタリングし、データベースの更新後に load data メソッドを呼び出します。

private void frmTableAllotment_Load(object sender, EventArgs e)
{
   dtTmPkr.Value = System.DateTime.Now;
   LoadComboBox();
}

private void btnAllocate_Click(object sender, EventArgs e)
{
    cmd = new SqlCommand("update  waiterentry2 set status='true'  where name=@name", con);
    cmd.Parameters.AddWithValue("name", dgvDetails.Rows[i].Cells[0].Value);
    cmd.ExecuteNonQuery();
    con.Close();
    LoadComboBox();
}

private void LoadComboBox()
{
    while(cmbWaiter.Items.Count >0)
         cmbWaiter.Items.RemoveAt(0);

    cmd = new SqlCommand("Select name from waiterentry2 where status='false'", con);
    con.Open();
    dr = cmd.ExecuteReader();
    while (dr.Read())
    {
        cmbWaiter.Items.Add(dr["name"]);
    }

    dr.Close();
    cmd = null;
    con.Close();
}
于 2013-09-05T10:50:25.187 に答える
0

btnAllocate_Clickイベントでdb操作が成功した後、フォームロードで記述したコードを呼び出してみてください

于 2013-09-05T10:54:23.983 に答える