Rechercher dans une zone de liste déroulante

voix
0

J'ai une zone de liste déroulante appelée cbProduit; la zone de liste déroulante est remplie par un service Web:

ComboBoxItemProduit produiItem = new ComboBoxItemProduit();
produiItem.Text = articleArray.GetAllArticlesResult[i].S_MODELE;
produiItem.Value = articleArray.GetAllArticlesResult[i].S_ID;
cbProduit.Items.Add(produiItem);

Le problème est, la zone de liste déroulante, quand il est rempli, contient plus de 30000 articles et je dois effectuer une recherche par texte.

Note: Je n'ai aucune relation avec une base de données toutes les informations est venue d'un service Web.

Quelqu'un peut-il aider s'il vous plaît?

Créé 18/12/2018 à 11:11
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
0

il y a deux options que je peux voir qui correspond à votre description.

Option 1 :

vous définissez une propriété autocomplete pour le combobox comme ceci:

comboBox1.DataSource = dt;
comboBox1.ValueMember = "ID";
comboBox1.DisplayMember = "VALUE";
comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;

mais alors, il ne peut fonctionner que sur votre premier caractère et affichera une liste comme ceci: entrez la description d'image ici

Option 2 :

mettre une nouvelle zone de texte avec un événement TextChanged:

private void textBox1_TextChanged(object sender, EventArgs e)
{
    if (string.IsNullOrEmpty(textBox1.Text))
    {
        comboBox1.DataSource = dt; //your origin data

    }
    else
    {
        var newTable = dt.AsEnumerable()
      .Where(x => x.Field<string>("VALUE").ToUpper().Contains(textBox1.Text.ToUpper()))
      .CopyToDataTable();

        comboBox1.DataSource = newTable;

    }
}

tandis que dt est vos données d'origine qui sont venus du serveur et le résultat est le suivant: entrez la description d'image ici

Créé 18/12/2018 à 12:14
source utilisateur

voix
0

Vous pouvez stocker les valeurs de la zone de liste déroulante dans un tableau et rechercher ce tableau pour les articles. Utilisez l'approche suivante

//Declare a list of string in the general declarations section of the form as follows
List<string> liststr = new List<string>();
//Add this line when populating the combo box
liststr.Add(produiItem);
//under the text changed event of the combo box, add these lines of code.
cbProduit.Items.Clear;
foreach (string search in liststr)
{
    if (search.StartsWith(cbProduit.Text)) { 
          cbProduit.Items.Add(search);

    }    
}
Créé 18/12/2018 à 12:15
source utilisateur

voix
0

essayer aucune base de données nécessaire à cette recherche

<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet" /> <script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script> <p>Use this area to provide additional information.</p> <select id="drop" class="js-example-basic-single"  style="width:200px;">
    <option>Hiii</option>
    <option>I</option>
    <option>Am</option>
    <option>Doing</option>
    <option>Asp</option>
    <option>MVC</option>

</select>

<script>$(document).ready(function () {
    $('.js-example-basic-single').select2();    });
Créé 18/12/2018 à 13:29
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more