2009-08-28 8 views
0

J'ai une listview appelée "lvQuestions" qui a un label (appelé lblMissingField) dessus et quelques autres champs. Lorsque l'utilisateur essaie de publier la page, j'appelle une routine qui définit tout d'abord TO lvlMissingField.Text = string.empty, puis valide que les champs "other" de ListViewDataItem ont été renseignés. S'ils n'ont pas été remplis, j'ai défini le lvlMissingField.Text = "*" de listview marquez-les avec un "*" (Note: les validateurs standards asp.net ne sont pas utilisés).L'étiquette dans la propriété de définition ListViewDataItem affecte toutes les étiquettes

Alors, que se passe-t-il? Chaque lblMissingField.Visible est affiché, qu'est-ce qui me manque ici?

foreach(ListViewDataItem question in unansweredQuestions) 
{ 
    ((Label)question.FindControl("lblMissingField")).Text = "*"; 
} 

J'ai fait que les unansweredQuestions ne sont que les ListViewDataItems que je veux, et je suis toujours surpris de voir la sortie HTML définit tous à « * » ...?

J'ai également essayé de définir Visible = true au lieu de définir le texte sur '*' (ce qui était ma préférence d'origine) sans aucune chance.

Voulez-vous profiter ici un peu fou ...

Répondre

0

Quand j'ai besoin de faire des fonctionnalités similaires à ce que vous faites et les mises à jour/vérifications ont été effectuées côté serveur, j'ai mis en place une méthode DataBinding pour chaque commande que je veux customiser. Quand quelque chose change, je me reconnecte à mon modèle avec les morceaux mis à jour qui doivent être changés.

Ainsi, par exemple, dans votre cas suppose que je suis liaison à une liste d'objets (peut-être DataTable ou autre) qui a les détails suivants:

public class MyData 
{ 
    public string Question { get; set; } 
    public string Answer { get; set; } 
} 
public List<MyData> listOfMyData = GetListOfMyData(); 

Alors mon événement DataBinding sur l'étiquette serait mise en œuvre

<asp:Label ID="lblMissingField" runat="server" OnDataBinding="lblMissingField_DataBinding" /> 

Ensuite, la mise en œuvre de la liaison de données:

protected void lblMissingField_DataBinding(object sender, System.EventArgs e) 
{ 
    Label lbl = (Label)(sender); 
    lbl.Text = (Eval("Answer").ToString() == string.Empty) ? "*" : string.Empty; 
} 

Cela vous donne beaucoup de contrôle sur chaque élément de votre modèle. Au lieu de traiter tous vos contrôles après le chargement de vos données, vous pouvez modifier les données au fur et à mesure que les données sont liées.

Je sais que ce n'est pas une solution à votre question exacte, mais peut-être juste une suggestion d'une autre façon d'aborder le problème.

+0

Merci pour ça! J'ai mis en place quelque chose de similaire et ça fonctionne vraiment bien. J'ai essayé pendant trop d'heures d'essayer de comprendre quel était le problème dans l'autre sens - cela n'a tout simplement pas de sens. – MrFishy

Questions connexes