2017-02-23 7 views
0
private void DeleteClient_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      connection = new SqlConnection(new DatabaseConnection().cnnString.ToString()); 
      connection.Open(); 
     } 
     catch (Exception exp) 
     { 
      MessageBox.Show(exp.Message, "Could not establish connection to the database.", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 

     cmd = new SqlCommand(new DatabaseAdd().addToComboBoxSE.ToString(), connection); 

     cmd.ExecuteNonQuery(); 
     DataTable dt = new DataTable(); 
     SqlDataAdapter da = new SqlDataAdapter(cmd); 
     da.Fill(dt); 
     foreach(DataRow dr in dt.Rows) 
     { 
      comboBox1.Items.Add(dr["Id"] + ". " + dr["FirstName"] + " " + dr["Surname"]); 
     } 
     connection.Close(); 

    } 

ここでは、データベースからコンボボックスに項目を追加しています。データベースの各行のID(int)、FirstName(varchar)、およびSurname(varchar)を各項目に追加します。コンボボックス内で選択されている内容に応じてデータベースから行を削除する方法

私の質問は、どのように私はコンボボックス内で選択したリスト項目に応じてデータベースから行を削除するつもりですか?私はコンボボックスにID(int)を追加するだけですが、id、firstname、surnameが必要なので、私が選択したリストオプションからIDを取得することはできません。

何か助けていただければ幸いです。ありがとうございました。

+0

データソースとしてデータテーブルを使用する場合は、ユーザーに名前を表示することができます。 – Plutonix

答えて

0

を。

クラスComboBoxItem.cs:あなたのforeachループ内

public class ComboBoxItem 
{ 
    public string Text { get; set; } 
    public object Value { get; set; } 

    public override string ToString() 
    { 
     return Text; 
    } 
} 

は次のようになります。

ComboBoxItem itm = new ComboBoxItem(); 
itm.Value = dr["Id"]; 
itm.Text = dr["Id"] + ". " + dr["FirstName"] + " " + dr["Surname"]; 
ComboBox1.Items.Add(itm); 

あなたはこのように選択した項目のIDを取得することができます:

String selectedId = ((ComboBoxItem)(ComboBox1.SelectedItem)).Value.ToString(); 

はそれを願っています助けてください。

+0

あなたが必要としていることを正しく理解しているかどうか教えてください。 – Efe

+0

この行にエラーが表示されます - > ComboBoxItem itm = new ComboBoxItem(); –

+0

どのようにしてComboBoxItemを作成し、その値を自分が望むIDに設定するのですか?私はちょっと混乱している。これはしばらくの間これに執着していたので、これは私をイライラしています –

0

私はこれは両方を扱う、コンボから削除するか、DBRowDeleter(string cmbName = "", bool deleteFromComboxBox)

から削除するには、一度選択コンボボックスから行を削除するために求めている場合 その後、 確認されませんでしたか、DBから

を削除

編集1コメントに基づいてコード更新:


//added optional parameter to pass combobox value after successfully record operations, or just call it 
    private void RowDeleter(ComboBox myComboBox) 
    { 
     try 
     { 
      SqlConnection conn = new SqlConnection(dataconnection); 
      SqlCommand cmd = new SqlCommand("myconn", conn); 
      cmd.CommandType = CommandType.StoredProcedure; 
      conn.Open(); 
      SqlDataAdapter da = new SqlDataAdapter(cmd); 
      DataSet ds = new DataSet(); 
      da.Fill(ds, "yourtableset"); 

      //look at what it is 
      String selectedId = (ComboBoxItem)(myComboBox.SelectedItem).Value.ToString(); 
      DeleteRecord(selectedId); 
      conn.Close(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.ToString()); 
     } 
    } 


    } 

// あなたが何をする必要があるか、Idは数値フィールドであると仮定すると、ヘルパー

private void DeleteRecord(string row) 
{ 
    return if (StringIsNullOrEmpty(row)) 

    string sql = "DELETE FROM Table1 WHERE RowID = @row"; 

    SqlCommand deleteRecord = new SqlCommand(); 
    deleteRecord.Connection = someconnection; 
    deleteRecord.CommandType = CommandType.Text; 
    deleteRecord.CommandText = sql; 

    SqlParameter RowParameter = new SqlParameter(); 
    RowParameter.ParameterName = "@RowID"; 
    RowParameter.SqlDbType = SqlDbType.string; //or int 
    RowParameter.IsNullable = false; 
    RowParameter.Value = row; 

    deleteRecord.Parameters.Add(RowParameter); 

    deleteRecord.Connection.Open(); 
    deleteRecord.ExecuteNonQuery(); 
    deleteRecord.Connection.Close(); 
    booksDataset1.GetChanges(); 

    // sqlDataAdapter1.Fill(someDataset.WHatverEmployees); 

} 
+0

残念ですが、コンボボックス内で選択されているリストオプションに応じてデータベースから行を削除することを意味します。 –

+0

表の主キーに使用するものに基づいて '型をIntまたはStringに変更します。これは冗長ですが、覚えやすくデバッグしやすいので、Connection Stringの1つの文字列変数でそれを圧縮することができます。 – transformer

1

を削除するには、あなたの文字列を分割し、リストからIDの値を抽出することです。アイテムのフォーマットはすべてのアイテムで同じなので、セパレータ文字列として". "を使用できます。 だから、あなたはこのような何か書くことができます:あなたは、あなたのコンボボックスに追加し、ComboBoxItemクラスのインスタンスを作成し、必要なIDにValueプロパティを設定する必要が

var str = selectedItem; // this is the value of selected item from the combo box and it's type is string. Example: "123. John Doe" 
int ID = 0; 

var str = selectedItem.Trim(); // this is the value of selected item from the combo box and it's type is string 
var index = selectedItem.IndexOf(". "); 

if (index > 1) 
{ 
    ID = Int32.Parse(selectedItem.Substring(0, index));     
} 
関連する問題