WPF延迟选择中的组合框

Posted

技术标签:

【中文标题】WPF延迟选择中的组合框【英文标题】:Combo Box in WPF delayed Selection 【发布时间】:2021-11-16 04:57:19 【问题描述】:

我有一个已连接到数据库的组合框。它很好用。但是,当我在组合框中选择项目时,我遇到了一个问题。

示例:我单击项目“A”没有任何反应。但是,当我单击另一个项目时,可以说“B”,然后它将我的文本块值更改为我第一次单击的组合框中的选定项目。所以它延迟了一个因素。

我的问题是为什么它在第一次点击时不起作用,但在第二次点击时起作用但延迟了一次。我正在使用 WPF C#,带有 SelectedChanged

我的代码如下:

ComboBox

private void FillModelComboBox()
    
        cn.Open();
        SqlCommand cmd = new SqlCommand("SELECT distinct NSTPartNum FROM RLWSTable ", cn);
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        
            ModelComboBox.Items.Add(dr["NSTPartNum"]);
            
            

        
        cn.Close();
    

SelectedChanged

private void ModelComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    
        cn.Open();
        SqlCommand cmd = new SqlCommand("SELECT * FROM RLWSTable where NSTPartNum='" + ModelComboBox.Text + "'", cn);
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        
            string modelnumber = dr["ModelNum"].ToString();
            TxtCalModelNumber.Text = modelnumber.ToString();
        
        cn.Close();
    

请记住,我使用 Initialized 组件调用 FillComboBox(),以便它填充组合框。我还在代码的另一部分调用了我的 SQL 连接,但是一切正常。

[在此处输入图片描述][1]

上面的图片是程序的主要部分然后下面的第二张图片是问题。

问题是第一次点击没有任何反应。

[在此处输入图片描述][2]

然后第二次单击一切正常,但延迟了。建立数据库的方式是我们有我们的零件号,然后是客户的零件号。所以这里的识别键是15K 我点击15k 没有任何反应,然后当我点击2.5k 然后它变成15k。无论您点击什么,它都会延迟 1 次点击。

我哪里出错了,或者我错过了什么?

编辑*

这解决了问题

private void ModelComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)

    string ModelNum = ModelComboBox.SelectedItem.ToString();

    cn.Open();
    SqlCommand cmd = new SqlCommand("SELECT * FROM RLWSTable where NSTPartNum='" + ModelNum + "'", cn);
    SqlDataReader dr = cmd.ExecuteReader();
    while (dr.Read())
    
        string modelnumber = dr["ModelNum"].ToString();
        TxtCalModelNumber.Text = modelnumber.ToString();
    
    cn.Close();

我添加了string ModelNum = ModelComboBox.SelectedItem.ToString();

这是在打开连接之前添加的 [1]:https://i.stack.imgur.com/AvkkT.png [2]:https://i.stack.imgur.com/E1R1m.png

【问题讨论】:

我猜ModelComboBox.Text 会在事件发生后更新。为什么不使用绑定? 【参考方案1】:

问题是 `ModelComboBox.Text 在 SelectionChanged 事件之后更新。 这可能会解决您的问题(重复?)

private void ModelComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    
        ComboBoxItem typeItem = (ComboBoxItem)cboType.SelectedItem;
        string value = typeItem.Content.ToString();
        cn.Open();
        SqlCommand cmd = new SqlCommand("SELECT * FROM RLWSTable where NSTPartNum='" + value + "'", cn);
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        
            string modelnumber = dr["ModelNum"].ToString();
            TxtCalModelNumber.Text = modelnumber.ToString();
        
        cn.Close();
    

Get selected value from combo box in C# WPF

【讨论】:

我之前看过它,它所做的一切都会引发错误。我有一个完整的信息数据库,将从填写 CalCert 和标签的 PartNumber 中提取。我到处搜索并尝试了不同的东西,但我无法弄清楚。使用绑定我不确定这将如何影响数据库的其他方面。我从绑定开始,因为数据库在多个地方使用,它导致了数据库中的性能问题。所以我不得不将数据库分离到自己的公司。 在我这边,这是未知的“连接到数据库”,但据我了解,您只能用字符串填充 ComboBox。所以你只能绑定SelectedValue。如果这个选项适合你,我可以为你写代码,这真的不是什么大事,而且几乎可以肯定它不会改变数据库部分。 private void ModelComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) string ModelNum = ModelComboBox.SelectedItem.ToString(); cn.Open(); SqlCommand cmd = new SqlCommand("SELECT * FROM RLWSTable where NSTPartNum='" + ModelNum + "'", cn); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) string modelnumber = dr["ModelNum"].ToString(); TxtCalModelNumber.Text = modelnumber.ToString(); cn.Close(); 你不能把这样的代码放在 cmets 中,它只是不可读。最好你编辑你的原始帖子并在最后添加为“编辑”,然后在你的评论中说明它是关于什么的。 我记不太清了,但是是的,当你开始的时候,你不能做任何事情。只需编辑您的原始帖子,最后写“编辑”,然后是您的代码。 (等等我自己做),告诉我你的代码是什么意思。

以上是关于WPF延迟选择中的组合框的主要内容,如果未能解决你的问题,请参考以下文章

WPF 组合框 - 选择第一项作为默认值

在wpf中访问数据网格内的组合框属性

禁止/阻止选择 wpf 中禁用的组合框项目

选择组合框时设置文本框的属性 WPF XAML

WPF Master-Details 视图与列表框和组合框与绑定

使用工具提示 WPF 在数据网格中填充组合框