Question

J'ai une table qui remplit un dropdownlist appelé DropDownList_Tracking_Status.La table dispose de 3 colonnes;ID, TrackingName et Active.Quand je remplis le dropdownlist, je tire tous les enregistrements où Active = "Y".

Quand je suis en train de lire les données dans le formulaire, je suis en train de pré-sélectionner la valeur appropriée pour DropDownList_Tracking_Status.Si la situation actuelle est vide (il n'a pas été choisi pour le moment), je l'ai mis égal à 2.Sinon, j'ai mis égale à la valeur précédemment sélectionné.Le problème que j'ai est que si le Suivi du Statut est un statut qui est, depuis, été marqués comme inactifs (où l'Actif a été défini sur "N"), il renvoie une erreur.De toute évidence, car il ne peut pas pré-sélectionner une valeur qui n'existe pas dans la liste déroulante.

Aucune idée sur comment résoudre ce problème?Mon bloc de code ressemble à ceci:

if ((DT["TrackingStatus"].ToString() == ""))
{
   DropDownList_Tracking_Status.SelectedValue = "2";
}
else
{
   DropDownList_Tracking_Status.SelectedValue = (DT["TrackingStatus"].ToString());
}

MODIFIER Je vais juste ajouter que la table qui remplit la dropdownlist est celui qui contient le champ Actif.Le SqlDataReader appelé DT n'a pas que le terrain en elle.Je suppose que je pourrais créer une requête qui joint les deux et vérifie la valeur de l'Actif, mais j'espérais qu'il y avait un moyen plus facile.Quelque chose qui dit (en pseudo-code):

If DropDownList_Tracking_Status.SelectedValue = (DT["TrackingStatus"].ToString()); throws you an error, do this instead...
Était-ce utile?

La solution

Vous pouvez placer le code dans try-catch bloc,

try
{
 DropDownList_Tracking_Status.SelectedValue = DT["TrackingStatus"].ToString();
}
catch
{
 DropDownList_Tracking_Status.SelectedValue = "2";
}

Il lie la valeur, s'il existe, sinon il sera par exception, sur lequel vous pouvez assigner aucune valeur par défaut dans catch le bloc.

Autres conseils

est le suivant possible (éventuellement précédé d'une vérification d'un enregistrement null):

if ((DT["TrackingStatus"].ToString() == ""))
{
   DropDownList_Tracking_Status.SelectedValue = "2"; 
}
else if(DT["Active"] == "N")
{
    DropDownList_Tracking_Status.SelectedValue = "2"; 
}
else
{
   DropDownList_Tracking_Status.SelectedValue = (DT["TrackingStatus"].ToString());
}

mise à jour L'ajout du champ actif à DT semble une bonne solution ou une alternative serait de voir si la liste déroulante contient la valeur cible.Voir la question de dépassement de pile ici

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top