J'essaie de définir l'élément sélectionné de comboBox
sur l'événement de clic de DataGrid, mais je ne pouvais pas. J'ai googlé et essayé différentes méthodes mais sans succès.
Pour moi, SelectedIndex
fonctionne, mais je ne pouvais pas trouver l'index des éléments dans ComboBox, je ne pouvais donc pas sélectionner l'élément.
Code non fonctionnel:
for (int i = 0; i < cmbVendor.Items.Count; i++)
if (cmbVendor.Items[i].ToString() == Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor")))
{
cmbVendor.SelectedIndex = i;
break;
}
Vous pouvez obtenir votre index par la méthode .Items.IndexOf()
. Essaye ça:
comboBox1.SelectedIndex = comboBox1.Items.IndexOf(gridView1.GetFocusedRowCellValue("vVendor"));
Vous n'avez pas besoin d'itérer.
Vous pouvez trouver plus d'informations dans la question Débordement de pileComment définir l'élément sélectionné dans une comboBox pour qu'il corresponde à ma chaîne en utilisant C #?.
Ce qui suit fonctionne parfaitement pour moi. Transmettez toute valeur ou texte disponible dans la liste déroulante.
comboBox1.SelectedIndex = comboBox1.FindString(<combobox value OR Text in string formate>);
Vous l'avez dans votre si:
cmbVendor.SelectedItem = cmbVendor.Items[i];
Enfin je l'ai découvert. Ses:
cmbVendor.Text = Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor"));
La propriété SelectedText concerne la partie sélectionnée du texte modifiable dans la partie zone de texte de la zone de liste déroulante.
En supposant que gridView1.GetFocusedRowCellValue("vVendor")
fonctionne vraiment comme prévu, le code suivant devrait résoudre le problème.
string selected = Convert.ToString(gridView1.GetFocusedRowCellValue("vVendor"));
foreach ( var item in cmbVendor.Items )
{
if (string.Compare(item.ToString(), selected, StringComparison.OrdinalIgnoreCase) == 0)
{
cmbVendor.SelectedItem = item;
break;
}
}
Le code d'origine comportait plusieurs appels à gridView1.GetFocusedRowCellValue("vVendor")
, alors que vous n'en avez besoin que d'un.
Le "comboBox1.Items.IndexOf (") suggéré suppose trop de choses sur le contenu de cmbVendor.Items
.
ComboBox1.SelectedIndex= ComboBox1.FindString("Matching String");
Essayez ceci cela fonctionnera correctement dans une application Windows C #
Si vous avez défini la propriété ValueMember pour le contrôle ComboBox, vous pouvez simplement associer la valeur à la propriété SelectedValue du contrôle ComboBox. Vous n'avez pas besoin de rechercher explicitement l'index. Voici un exemple:
public class Vendor{
public int VendorId {get; set;}
public string VendorName {get; set;}
}
// Inside your function
var comboboxData = new List<Vendor>(){
new Vendor(){ vendorId = 1, vendorName = "Vendor1" },
new Vendor(){ vendorId = 2, vendorName = "Vendor2" }
}
cmbVendor.DataSource = comboboxData;
cmbVendor.DisplayMember = "VendorName";
cmbVendor.ValueMember = "ValueId";
// Now, to change your selected index to the ComboBox item with ValueId of 2, you can simply do:
cmbVendor.SelectedValue = 2;
J'ai eu un problème similaire et l'ai partiellement résolu à l'aide des autres réponses fournies ici. Premièrement, mon problème particulier était que
combobox1.SelectedItem = myItem;
ne fonctionnait pas comme prévu. La cause principale était que myItem était un objet d'un groupe qui était en réalité la même liste que les éléments de la liste déroulante, mais qu'il s'agissait en fait d'une copie de ces éléments. Ainsi, myItem était identique à une entrée valide, mais n'était pas un objet valide du conteneur combobox1.
La solution consistait à utiliser SelectedIndex au lieu de SelectedItem, comme suit:
combobox1.SelectedIndex = get_combobox_index(myItem);
où
private int get_combobox_index(ItemClass myItem)
{
int i = 0;
var lst = combobox1.Items.Cast<ItemClass >();
foreach (var s in lst)
{
if (s.Id == myItem.Id)
return i;
i++;
}
return 0;
}