2017-02-09 10 views
1

私は検索して試しましたが、私のニーズに適切な答えが見つからないのでした。データテーブルからコンボボックスにデータを入力してください

私のアプリケーションでは、私はデータベーステーブルの列leavetypeからデータを追加したいのですが、コンボボックスがあります。私はコンボボックスをクリックしたときに

table hsettings 
hsysid 
leavetype 
martialstatus 

今私は、マウスクリックイベント、

private void txtleavetype_MouseClick(object sender, MouseEventArgs e) 
{ 
    try 
    { 
     con = new SqlConnection(cs.DBConn); 
     con.Open(); 
     cmd = new SqlCommand(" select leavestype from hrsettings", con); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     while (dr.Read()) 
     { 
      txtleavetype.Items.Add(dr["leavestype"]); 
     } 
     dr.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

を使用しています、それはテーブルの列からのデータを示しているが、それぞれの上に複数回ロードされている同じ列のデータをクリックしてください。

1 
2 
3 
4 
1 
2 
3 
4 

クリックごとに1回読み込んだり、別の方法で整理したりしたいと思っています。

+0

最初にページロードでコンボボックスを読み込む方法はありますか? –

+0

あなたのお返事に感謝します。 – Bukhalifa

答えて

1

コンボボックスが既に読み込まれているかどうかを確認できます。

private void txtleavetype_MouseClick(object sender, MouseEventArgs e) 
{ 
    try 
    { 
     if(txtleavetype.Items.Count==0){ 
     con = new SqlConnection(cs.DBConn); 
     con.Open(); 
     cmd = new SqlCommand(" select leavestype from hrsettings", con); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     while (dr.Read()) 
     { 
      txtleavetype.Items.Add(dr["leavestype"]); 
     } 
     dr.Close(); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

それ以外の場合は、追加する前にリスト項目をクリアすることができます。

コメントごとに、以下のコードをPage_Loadイベントに移動し、ポストバックでない場合はifを使用することもできます。

protected void Page_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      if (!IsPostBack) 
      { 
      txtleavetype.Items.Clear(); 
      con = new SqlConnection(cs.DBConn); 
      con.Open(); 
      cmd = new SqlCommand(" select leavestype from hrsettings", con); 
      SqlDataReader dr = cmd.ExecuteReader(); 
      while (dr.Read()) 
      { 
       txtleavetype.Items.Add(dr["leavestype"]); 
      } 
      dr.Close(); 
      } 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 

希望はこちら!

+0

これは解決策ではなく、回避策になります。 –

+0

はい、回避策です。 –

+0

@ un-luckyコメント数が更新されました。 –

0

補充する前に、コンボボックスからすべてのアイテムを削除する必要があります。

private void txtleavetype_MouseClick(object sender, MouseEventArgs e) 
{ 
    try 
    { 
     con = new SqlConnection(cs.DBConn); 
     con.Open(); 
     cmd = new SqlCommand(" select leavestype from hrsettings", con); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     txtleavetype.Items.Clear(); 
     while (dr.Read()) 
     { 
      txtleavetype.Items.Add(dr["leavestype"]); 
     } 
     dr.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

最も良いことは、form_loadの時点でコンボボックスに項目を追加することです。

private void Form1_Load(object sender, EventArgs e) 
{ 
    try 
    { 
     con = new SqlConnection(cs.DBConn); 
     con.Open(); 
     cmd = new SqlCommand(" select leavestype from hrsettings", con); 
     SqlDataReader dr = cmd.ExecuteReader(); 
     while (dr.Read()) 
     { 
      txtleavetype.Items.Add(dr["leavestype"]); 
     } 
     dr.Close(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 
関連する問題