2010-03-02 7 views
2

J'ai un contrôle DropDownList dans un EditItemTemplate pour une vue détails définie comme ceci:événement ASP.NET OnDataBinding pour EditItemTemplate DropDownList

<asp:TemplateField HeaderText="Primary Use"> 
<EditItemTemplate> 
    <asp:DropDownList ID="ddlPrimaryUseEdit" runat="server" OnDataBinding="DropDownList_DataBinding" 
     SelectedValue='<%# Bind("PrimaryUse") %>' ToolTip="Primary Use"> 
    <asp:ListItem Value="">Unknown</asp:ListItem> 
    <asp:ListItem>Manufacturing Facilities</asp:ListItem> 
    <asp:ListItem>Residential</asp:ListItem> 
    <asp:ListItem>VSSM Office</asp:ListItem> 
    <asp:ListItem>Engineering/Office/Warehouse</asp:ListItem> 
    <asp:ListItem>Vacant/Surplus Land</asp:ListItem> 
    </asp:DropDownList> 
</EditItemTemplate> 

J'ai une source de données definded comme une requête à ma base de données qui a une colonne nommée "PrimaryUse". Parfois, il peut y avoir une valeur dans la colonne PrimaryUse qui n'est pas répertoriée comme l'un des éléments de la liste déroulante et mon application se bloque lorsque vous essayez de lier la valeur sélectionnée de la liste déroulante à ce champ. J'essaie de créer du code dans l'événement OnDataBinding de edititemtemplate qui va vérifier si la valeur renvoyée par la source de données est une valeur valide listée comme un élément dans les options dropdownlist. Mon problème est que je ne suis pas sûr de savoir comment obtenir la valeur de champ datasources pour cette colonne dans le code derrière. Est-ce possible? Est-ce le cas, quelqu'un peut-il me donner un exemple ou me pointer dans la direction sur la façon de faire cela?

Ainsi, en cas OnDataBinding pour le EditItemTemplate énumérés ci-dessus, je voudrais faire quelque chose comme ce qui suit (code psuedo):

if datasource.datafieldvalue("PrimaryUse") is in dropdownlist.Items then Valid 
else set dropdownlist.Selectedvalue = "Default" 
+0

quelle langue utilisez-vous? –

+0

vb.net serait ma conjecture, car il a le (si, alors, d'autre) passe, mais encore une fois son pseudocode – curtisk

Répondre

0

Vous devriez être en mesure d'utiliser juste Eval() dans la codebehind pour obtenir cette valeur. Un problème cependant, c'est que je pense que vous essayez de faire cela au mauvais endroit ... Vous devez le faire dans OnDataBinding (ou OnItemDataBound, etc) pour le contrôle des données, pas le DropDownList. L'événement DropDownList n'aura pas le contexte correct, ce qui peut expliquer pourquoi vous rencontrez un problème.

+0

J'utilise C# comme langue. Donc vous dites que je peux utiliser l'Eval() dans mon code? Pourriez-vous donner un exemple de la façon dont vous écrivez cette déclaration dans le code derrière? Je suis seulement familier avec l'utilisation eval() dans la page .aspx: <% # Eval ("PrimaryUse")%> Aussi, vous dites que j'ai besoin de gérer cela dans le OnDataBinding pour ma source de données? Par exemple: Rudi

+0

Je dis que vous devez le gérer dans l'événement DataBinding pour quel que soit le contrôle contenant , c'est-à-dire celui où les données réelles qui vous intéressent proviennent. – Bryan

1

Vous souhaitez vérifier les valeurs valides dans le gestionnaire d'événement onDataBinding de la source de données. Le résultat d'une liaison de données de source de données réussie est une distribution de liste à partir des EventArgs. Si vous connaissez un peu LINQ vous pouvez écrire quelque chose comme:

var validData = ((PrimaryUseTable)e.Results).PrimaryUse.Intersect(DropDownList.Items.AsEnumerable()) 
if(validData.Any()) 
{ 
    //Do Stuff 
} 
else 
// Alternate Stuff 
+0

Vous devrez probablement nettoyer le code ci-dessus en affectant d'abord les variables ((PrimaryUseTable) e.Results) à une variable, puis utiliser la variable dans votre requête LINQ. J'ai ajouté la colonne PrimaryUse juste avant la fonction Intersect. – aastle