簡體   English   中英

C#窗體表單列表框選中索引更改事件觸發表單加載和按鈕單擊

[英]C# windows forms listbox selected index changed event fires on form load and button click

我正在編寫一個程序,允許用戶使用客戶名稱搜索客戶訂單,用戶在TextBox鍵入名稱,搜索結果顯示在ListBox控件中,用戶必須從列表中選擇名稱框和客戶的訂單顯示在DataGridView ,問題是客戶點擊SelectedIndex更改事件后觸發的搜索按鈕並導致程序崩潰。

private void btnSearch_Click(object sender, EventArgs e)
{
   string Query = "SELECT  CustomerID, CompanyName FROM Customers WHERE (CompanyName ”+                “LIKE'%"+ txtSearch.Text + "%')";
   clsDataTools.cmdComand = clsDataTools.con.CreateCommand();
   clsDataTools.cmdComand.CommandText = Query;

   clsDataTools.dtaDataAdapter = new SqlDataAdapter();
   clsDataTools.dtaDataAdapter.SelectCommand = clsDataTools.cmdComand;
   dsOrdersByCusName = new DataSet();
   clsDataTools.con.Close();
   clsDataTools.con.Open();
   clsDataTools.dtaDataAdapter.Fill(dsOrdersByCusName);
   clsDataTools.con.Close();
   dsOrdersByCusName.Tables[0].TableName = "OrderBCusName";

   lstResults.DataSource = dsOrdersByCusName.Tables[0];

   lstResults.DisplayMember = "CompanyName";
   lstResults.ValueMember = "CustomerID";
}

private void lstResults_SelectedIndexChanged(object sender, EventArgs d)
{
    string Query = "SELECT  * From Orders WHERE CustometID  = '" 
                   + lstResults.SelectedValue  
                   + "'";

    dataGridDataSet = new DataSet();
    clsDataTools.dtaDataAdapter = new SqlDataAdapter();
    clsDataTools.cmdComand = clsDataTools.con.CreateCommand();
    clsDataTools.cmdComand.CommandText = Query;
    clsDataTools.con.Close();
    clsDataTools.con.Open();
    clsDataTools.dtaDataAdapter.SelectCommand = clsDataTools.cmdComand;
    clsDataTools.dtaDataAdapter.Fill(dataGridDataSet);
    clsDataTools.con.Close();
    dataGridDataSet.Tables[0].TableName = "Orders";

    dgvCusOrders.DataSource = dataGridDataSet;
    dgvCusOrders.DataMember = dataGridDataSet.Tables["Orders"].ToString();
  }

我真的不明白為什么當我點擊搜索按鈕時會引發SelctedIndexChanged事件是否有我可能遺漏的東西?

由於您設置了lstResults的數據源,因此它將調用SelectedIndexChanged ,您可以執行以下操作

private void btnSearch_Click(object sender, EventArgs e)
{
    //Remove the handler 
    this.lstResults.SelectedIndexChanged -= lstResults_SelectedIndexChanged;
    // 
    // Your code
    //
    this.lstResults.SelectedIndexChanged += lstResults_SelectedIndexChanged; // Add the handler 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM