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