2010-10-18 8 views
3

J'utilise un contrôle DevExpressLookUpEdit. Ma base de données a deux tables qui contrôlent la population des options de contrôle. Un appelé MaintCategory et un appelé MaintItem. Cela introduit un nombre magique dans mon programme (le CategoryID) mais permet beaucoup de personnalisation d'exécution.Comment insérer une ligne "vide" dans un DataTable?

Mon problème réside dans la façon de permettre à mes utilisateurs de désélectionner une liste déroulante SANS que je doive ajouter un élément "vide" pour chaque CategoryID. N'y a-t-il pas moyen d'injecter une ligne vide? Au niveau du contrôle ou lorsque je construis le DataTable pour revenir?

C'est la méthode DAL que j'utilise pour remplir tous les choix de contrôle.

public static DataTable GetMaintItems(int iCat) 
    { 
     using (var context = CmoDataContext.Create()) 
     { 
      IQueryable<tblAdminMaintItem> tItems = context.GetTable<tblAdminMaintItem>(); 

      return (tItems.Where(item => item.CategoryID == iCat & item.Active == true).OrderBy(item => item.OrderID).Select(
       item => new { item.ItemID, item.ItemDescription })).CopyLinqToDataTable(); 
     } 
    } 
+0

Impossible de savoir pourquoi vous devez avoir une ligne vide. Que voulez-vous dire par désélectionner la liste déroulante "désélectionner une liste déroulante SANS que je doive ajouter un élément" vide "pour ..."? Pouvez-vous élaborer l'utilisation? Pour une liste déroulante, définir l'élément selected à -1 sinon fait le travail. – Kangkan

+0

@Kangkan: À l'heure actuelle, une fois qu'ils ont sélectionné un élément dans la liste déroulante, ils ne peuvent pas «changer d'avis» et décider qu'ils ne veulent rien sélectionner de cette catégorie. Il n'y a pas d'option non-select, clear, blank, etc. Cela a plus de sens. –

Répondre

3

En fait, je suis tombé sur un très problème similaire dans une application que je travaillais sur l'utilisation récemment LookUpEdit contrôle DevExpress - l'incapacité de revenir le contrôle à avoir pas sélection une fois qu'une sélection a été faite.

Ma solution était:

  1. Définissez la propriété LookUpEdit.Properties.AllowNullInput à true.
  2. Ajoutez un gestionnaire d'événement à l'événement LookUpEdit.Validating.
  3. Dans ce gestionnaire d'événements, recherchez une chaîne vide en tant que propriété Text et définissez manuellement EditValue à null.

En d'autres termes, quelque chose comme ceci:

void m_lookUpEdit_Properties_Validating(object sender, CancelEventArgs e) 
{ 
    if (string.IsNullOrEmpty(m_lookUpEdit.Text)) 
    { 
     m_lookUpEdit.EditValue = null; 
    } 
} 

Cela permet à l'utilisateur d'effacer le texte dans le contrôle, et ont efficacement remis à zéro sa valeur à null.

0

Pourquoi ne pas essayer quelque chose comme ceci:

dropdown.DataSource = GetMaintItems(x); 
    dropdown.DataTextField = "Name"; 
    dropdown.DataValueField = "ID"; 
    dropdown.DataBind(); 
    dropdown.Items.Insert(0, new ListItem("Select item", "-1")); 

Merci, Flores

+0

Merci pour votre aide, malheureusement j'utilise un * DevExpress LookUpEdit Control * et il n'y a pas de 'Items'. –

Questions connexes