2009-04-04 8 views
2

Je travaille sur un formulaire avec un GridView, en tirant des données à partir d'une base de données SQL Express. La dernière colonne sera un bouton que je veux pouvoir modifier en fonction des données liées à cette colonne.Modifier les propriétés d'un bouton ASP en fonction des données liées dans un GridView?

Le bouton agira comme un bouton "Activer/Désactiver". Fondamentalement, si un utilisateur est activé, je veux que le bouton dise "Désactiver" et que la propriété OnClientClick pointe vers une fonction de désactivation; Si l'utilisateur est désactivé, je souhaite que le bouton affiche "Activer" et pointe vers une fonction d'activation.

Mon google-fu est faible aujourd'hui, en espérant que vous puissiez tous être utile. Merci d'avance.

+0

Vous n'avez pas modifier votre réponse quand vous obtenez une réponse. Marquer une réponse comme acceptée est tout ce que vous devez faire. – Samuel

Répondre

2

essayer, je suppose que votre Activé/Désactivé est une valeur de bit dans le DB

<asp:TemplateField> 
    <ItemTemplate> 
    <asp:Button runat="server" ID="btn" Text='<%# "1".Equals(Eval("Enabled").ToString()) ? "Enabled" : "Disabled" %>' OnClick='<%# "1".Equals(Eval("Enabled").ToString()) ? "DISABLE_METHOD" : "ENABLE_METHOD" %>' /> 
    </ItemTemplate> 
</asp:TemplateField> 
+0

vous devrez toujours fournir l'ID de l'utilisateur à l'argument de commande pour cette situation. puis relier toute la grille après traitement. –

1

Utilisez l'événement OnRowDatabound (en supposant .net 2.0 vers le haut) comme point de départ. Vous aurez alors accès aux données de ligne de la ligne et pourrez changer votre bouton si nécessaire. Je vais voir si je peux trouver un exemple concret pour vous.

2

que le texte « Activé/Désactivé » dans l'ensemble de données qui est utilisé pour lier la grille.

Ensuite, en utilisant une colonne de modèle, définissez le bouton comme ainsi:

<asp:button text='<%# Eval("IsEnabled") %>' runat=server commandname='<%# Eval("IsEnabled") %>' commandargument ='<%# Eval("UserId") %>' id="myButton" /> 

Puis, sur l'événement RowCommand de la grille, faites ceci:

dim btn as button = e.item.findcontrol("myButton") 
select case e.Command 
    case "Enable" 
    myDisableFunction(e.commandargument) 
    btn.Text = 'Disable' 
    btn.Cmmand = 'Disable' 
    case "Disable" 
    myEnableFunction(e.commandArgument) 
    btn.Text = "Enable" 
    btn.Commandname="Enable" 
end case 
+0

+ 1- Je parie que IsEnabled est un peu dans la base de données, vous pourriez vouloir refaire votre logique CommandName –

+0

@rm - J'ai spécifié le retour de TEXT de l'ensemble de données pour cette raison particulière. La modification du bit en une chaîne peut être effectuée en SQL via: CASE IsEnabled = 1 ALORS 'Disable' ELSE 'Enable' END AS IsEnabled. Cela sera également plus rapide qu'une instruction IF dans le code. –

Questions connexes