将输入用于检查其列表中项目的自动完成组合框

时间:2016-11-18 09:19:27

标签: c# sql winforms

有没有办法检查在comboBox中输入项目的时间,实际上只有一个在列表中?为了进一步解释,如果选择了列表之外的任何内容,它将不会接受该输入。我已经在stackoverflow中查看,但我看到的唯一解决方案是将我的comboBox样式更改为下拉列表样式。这个问题是有超过一百条记录可供选择,所以comboBox上的自动完成是绝对必要的,可以通过输入的用户输入来过滤掉这些记录。

更新(全局声明匹配):

private void comboBox3_TextChanged(object sender, EventArgs e)
    {
        ComboBox c = ((ComboBox)sender);
        string[] items = c.Items.OfType<string>().ToArray();
        matched = items.Any(i => i == c.Text.Trim().ToLower());

    }

这就是它执行的地方:

 private void button5_Click(object sender, EventArgs e)
    {

        if (matched==false)
        {
            MessageBox.Show("Value in Carimed Items does not exist");
        }else
        {


            if (string.IsNullOrEmpty(comboBox5.Text))
        {
            MessageBox.Show("Please select output file to be written to!");
        }
        else
        {

            //  int current = 0;
            if (comboBox1.Text.Trim() == string.Empty)
            {
                MessageBox.Show("All fields must be filled in before saving!");

            }
            else
            {


                    //  StringBuilder csvconten = new StringBuilder();
                    // csvconten.AppendFormat("{0},{1},{2},{3},{4},{5}\r\n", comboBox2.Text, textBox5.Text, textBox2.Text, comboBox3.Text, textBox3.Text, comboBox1.Text);
                    // string csvpath = "cross_check.csv";
                    // File.AppendAllText(csvpath, csvconten.ToString());

                    string connectionString3 = "Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacy_Output_File;Integrated Security=True";
                    string query3 = "INSERT INTO dbo.[" + comboBox5.Text + "] VALUES('" + comboBox2.Text + "','" + textBox5.Text.Replace("'", "''") + "','" + textBox7.Text.Replace("'", "''") + "','" + textBox2.Text.Replace("'", "''") + "','" + comboBox3.Text.Replace("'", "''") + "','" + textBox3.Text + "','" + comboBox1.Text + "');";

                    using (SqlConnection connection = new SqlConnection(connectionString3))
                    {
                        SqlCommand command = new SqlCommand(query3, connection);

                        command.Connection.Open();
                        command.ExecuteNonQuery();
                        command.Connection.Close();

                    }


                    //   textBox1.Clear();
                    //     textBox3.Clear();
                    //   comboBox3.ResetText();

                    textBox2.Clear();
                    textBox3.Clear();
                    comboBox3.ResetText();
                    comboBox1.ResetText();
                }

                string connectionString2 = "Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True";
                string query2 = "UPDATE Liguanea_Lane2 SET Progress= '1' where code = '" + comboBox2.Text + "'; ";


                using (SqlConnection connection = new SqlConnection(connectionString2))
                {
                    SqlCommand command = new SqlCommand(query2, connection);
                    command.Connection.Open();
                    command.ExecuteNonQuery();
                }
                //this.liguanea_ProgressTableAdapter1.Fill(this.pharmaciesDataSet7.Liguanea_Progress);
                comboBox2.SelectedIndex = comboBox2.SelectedIndex + 1;
                //current = liguaneaLane2BindingSource.Position;
                //this.liguanea_Lane2TableAdapter.Fill(this.pharmaciesDataSet3.Liguanea_Lane2);
                refreshDataGrid2();
                if (dataGridView1.CurrentRow != null)
                {

                    dataGridView1.CurrentCell =
                        dataGridView1
                        .Rows[Math.Min(dataGridView1.CurrentRow.Index + 1, dataGridView1.Rows.Count - 1)]
                        .Cells[dataGridView1.CurrentCell.ColumnIndex];
                    // liguaneaLane2BindingSource.Position = Math.Min(current + 1, liguaneaLane2BindingSource.Count - 1);
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

您可以使用ComboBox的<Window x:Class="ImageCatalogBrowser.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:ImageCatalogBrowser" xmlns:imaging="clr-namespace:Microsoft.VisualStudio.Imaging;assembly=Microsoft.VisualStudio.Imaging" xmlns:theming="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Imaging" xmlns:utilities="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Utilities" xmlns:catalog="clr-namespace:Microsoft.VisualStudio.Imaging;assembly=Microsoft.VisualStudio.ImageCatalog" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <Window.Resources> <utilities:BrushToColorConverter x:Key="BrushToColorConverter"/> </Window.Resources> <Grid> <StackPanel Background="White" VerticalAlignment="Center" theming:ImageThemingUtilities.ImageBackgroundColor="{Binding Background, RelativeSource={RelativeSource Self}, Converter={StaticResource BrushToColorConverter}}"> <Border BorderThickness="1" BorderBrush="Black" Width="33" Height="33"> <imaging:CrispImage x:Name="crisp" Visibility="Visible" Width="32" Height="32" Moniker="{x:Static catalog:KnownMonikers.Save}" /> </Border> </StackPanel> </Grid> </Window> 事件查看输入文字是否存在于您的列表中:

TextChanged

您可以 private void comboBox1_TextChanged(object sender, EventArgs e) { ComboBox c = ((ComboBox)sender); string[] items = c.Items.OfType<string>().ToArray(); bool matched = items.Any(i => i == c.Text.Trim().ToLower()); } 事件将分配其值的形式全局声明matched bool,然后您可以在其他方法中使用它:

TextChanged