2010-11-24 4 views
0

Ceci est mon répéteur:Besoin d'aide avec répéteur

<asp:Repeater ID="myRepeater" OnItemCommand="myRepeater_ItemCommand" runat="server" OnItemDataBound="myRepeater_OnItemDataBound"> 
    <HeaderTemplate> 
     <table width="99%" border="0" cellpadding="0" cellspacing="0"> 
      <tr class="lgrey"> 
       <td>Default</td> 
      </tr> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <table> 
      <tr> 
       <td> 
        <asp:LinkButton ID="lnk1" Text="Make Default" CommandName="SetDefault" runat="server" Visible="True" CommandArgument='<%#Eval("UserID") %>' CausesValidation="false"></asp:LinkButton> 
        <asp:Label ID="label1" Text="Yes" runat="server" Visible="False"></asp:Label> 
       </td> 
      </tr> 
    </ItemTemplate> 
    <FooterTemplate> 
     </table> 
    </FooterTemplate> 
</asp:Repeater> 

Ce que je veux est que lorsque l'utilisateur clique sur l'un des sur le bouton lien « LNK1 » dans la liste qui répéteur rend, le lien doit être remplacé avec l'étiquette « label1 » .. -à-dire lorsque l'utilisateur clique sur « Définir par défaut » lien, il doit être remplacé par l'étiquette « Oui »

appel de cette méthode est obj.SetDefaultAddress(); Réglage de l'adresse par défaut dans le DB bien .. problème est avec l'affichage de l'étiquette1 et lnk1 lorsque le le répéteur rend ...

ce qui se produit est que les deux boutons "Make Default" LinkButton et "YES" s'affichent sous la colonne "Default" de la table à l'intérieur de mon répéteur.

Je veux un code qui va vérifier l'étiquette « IsDefault » valeur dans mon DB et afficher « Définir par défaut » bouton lien

et « OUI » en conséquence ... Autrement dit, si la valeur de IsDefault dans le DB est vrai, "YES" devrait être affiché dans le répéteur sinon "Make Default"

Répondre

2

Etes-vous sûr que votre morceau de code dans le code sous ItemCommand est en cours d'exécution? J'ai seulement changé le CommandName de SetDefault à SetDefaultAddress dans le fichier aspx pour correspondre à celui dans le code derrière, cela a fonctionné.

+0

J'ai corrigé que ... J'ai tapé cela par erreur..Les noms de commandes DO correspondent ... C'est en réglant l'adresse par défaut dans DB! – Serenity

+0

Dans votre code édité, vous utilisez obj.IsDefault, avez-vous essayé de vérifier sa valeur en mode debug? – Waqas

+0

Débogueur montre que la valeur de IsDefault est fausse seulement apparemment c'est pourquoi le lien "Make Default" s'affiche à l'intérieur du répéteur. Le répondeur ci-dessous dit que le probelm est avec l'index choisi. Comment puis-je résoudre ce problème? Plz help..thnx – Serenity

0

où commencer ...

Je pense que ce qui cause votre problème est que le SelectedItem et la DefaultAddress ne sont pas mis en correspondance les uns aux autres, de sorte que lorsque vous cliquez sur le bouton que vous obtenez l'index sélectionné et mis en OnItemDatabound événement affiche/cache ce que vous voulez, mais lorsque la grille est initialisée à partir de la base de données, le SelectedItem n'est pas défini. Je ne sais pas quelle est votre source de données, et il y a évidemment plus de code que ce que vous avez posté, mais si vous pouvez regarder le e.Item.DataItem dans le gestionnaire myRepeater_ItemDataBound, vous pouvez définir l'élément actuel comme sélectionné quand l'adresse est la valeur par défaut (e.Item.ItemType... or use your "selectedIndex" counter)

+0

La source de données provient d'une procédure stockée qui sélectionne simplement toutes les colonnes de la table UserAddress – Serenity

+0

que dois-je changer dans mon code? Je si je n'utilise pas cet index sélectionné alors étiquette ne change pas à "OUI" je suis perdu:/ – Serenity

0

Je vais probablement le faire à partir du balisage lui-même - à supposer que vous ayez la colonne/propriété "IsDefault" de type bit/boolean dans votre source de données indiquant que l'adresse est par défaut. Il faut donc utiliser le balisage suivant:

... 
<tr> 
    <td> 
     <asp:LinkButton ID="lnk1" Text="Make Default" CommandName="SetDefault" runat="server" Visible='<%# !Eval("IsDefault") %>' CommandArgument='<%#Eval("UserID") %>' CausesValidation="false"></asp:LinkButton> 
     <asp:Label ID="label1" Text="Yes" runat="server" Visible='<%# !Eval("IsDefault") %>'></asp:Label> 
    </td> 
</tr> 
... 

Vous devez contrôler la visibilité basée sur la propriété dans votre source de données (soit en utilisant un balisage ou un événement ItemDataBound). En outre, lorsque vous cliquez sur le lien SetDefault, vous devez soit lier à nouveau le nouvel état du répéteur, soit basculer explicitement la visibilité (comme le fait votre code actuel).

EDIT: Si l'expression de liaison de données ne fonctionne pas, vous devez le faire dans l'événement ItemDataBound. Je vois que vous avez déjà essayé, mais il y a une erreur - bllUsers obj=new bllUsers(); aura toujours IsDefault comme faux - vous devez utiliser l'élément de données. Par exemple,

protected void myRepeater_ItemDataBound(Object sender, RepeaterItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
     { 
      bllUsers obj = e.Item.DataItem as bllUsers; 
      ((Label)e.Item.FindControl("ldefault")).Visible = obj.isDefault; 
      ((Button)e.Item.FindControl("btnMakeDefault")).Visible = ! obj.isDefault; 
     } 
    } 
+0

J'ai essayé de le faire exactement comme ça dans le balisage! didnt travail :(dire que je dois re-bind le nouvel état de répéteur ... comment puis-je faire cela et où? comme appelez la méthode thats répétiteur de liaison? Où puis-je l'appeler? – Serenity

+0

Je suis liaison répéteur dans l'événement de commande Item comme ceci déjà: - myRepeater.DataSource = GetAddress(); myRepeater.DataBind(); – Serenity

+0

@Serenity, que se passe-t-il lorsque vous utilisez Visible = '<% #! Eval ("IsDefault")%>' dans le balisage? le html généré comme - est-ce qu'il génère Visible = "Vrai/Faux" ou l'expression de liaison de données n'est pas résolue correctement? – VinayC