C# windows 窗体列表框选定索引更改事件在窗体加载和按钮单击时触发

标签 c#

我正在编写一个程序,允许用户使用客户名称搜索客户订单,用户在 TextBox 中输入名称,搜索结果显示在 ListBox 控制用户必须从列表框中选择一个名称,并且客户的订单显示在 DataGridView 中,问题是一旦客户单击搜索按钮,SelectedIndexchanged 事件触发并导致程序崩溃。

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 
}

关于C# windows 窗体列表框选定索引更改事件在窗体加载和按钮单击时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17592188/

相关文章:

c# - 如何在oxyplot中绘制经验分布函数?

c# - Web 浏览器控件 : click won't work

c# - 如何使用鼠标在 WPF 中创建左右滑动?

c# - 具有优先级的信号量

c# - 在 C#/Visual Studio 中的每个构建上自动更新代码中的常量值

c# - 如果我知道 API 在某个时候执行 I/O,我是否应该异步调用 brownfield API?

c# - 映射两个相同类型的对象(不包括某些字段)的最佳方法是什么?

c# - 如何从 SQL 数据库填充 C# 中的通用对象列表

C# 防止 Collection Was Modified 异常

c# - 在 C# 中控制由 URI 启动的进程