2009-02-04 3 views
0

Je dois définir la propriété 'ReadOnly' d'un BoundField dans un GridView à la valeur d'un champ de bits dans le jeu d'enregistrements qui est affiché par le même GridView.Utilisation de données pour définir les propriétés d'un GridView

Je suis conscient que je pourrais réaliser ceci dans le code, mais je me demandais, par intérêt, s'il est possible de le faire de façon déclarative à l'intérieur de la propriété en utilisant un fragment <%%>?

Cheers,

Jamie

Répondre

1

Oui, vous pouvez le faire. Créer un TemplatedField et dans la déclaration de liaison utiliser soit

<%# ((Employee)Container.DataItem).IsApproved ? "yes" : "no" %> 

ou vous pouvez utiliser une méthode à partir du code-behind

<%# FormatBool(((Employee)Container.DataItem).IsApproved) %> 

où FormatBool est une propriété dans votre code-behind

protected string FormatBool(bool value) 
{ 
    if (value) 
     return "yes"; 
    return "no"; 
} 
0

Si vous avez besoin de se lier à des propriétés, j'utiliser un TemplateField puis définir le comportement là-bas. C'est seulement si vous ne pouvez pas utiliser le code, sinon, c'est votre meilleur pari.

Je ne pense pas qu'il existe un moyen de lier directement les détails d'un BoundColumn.

0

Je n'ai pas réussi à trouver un moyen de manipuler les propriétés de BoundField ou de TemplateField en fonction des données de DetailView. Bendewey supposait que je me liais à un objet métier alors qu'en fait je traitais les données directement dans ce cas - je m'excuse de ne pas l'avoir dit clairement.

Ma solution dans le code était derrière les suivantes:

protected void DetailsView1_DataBound(object sender, EventArgs e) 
    { 
     DetailsView dv = (DetailsView)sender; 

     if (dv.DataItemCount > 0) 
     { 
      DataRowView data = (DataRowView)dv.DataItem; 
      bool isFixed = (bool)data["IsFixed"]; 

      if (isFixed) 
      { 
       dv.Rows[2].Enabled = false; 
       dv.Rows[6].Enabled = false; 
      } 
     } 
    } 

j'étais déçu que je devais faire référence aux lignes que je voulais désactiver par index. Il est possible qu'il existe un moyen de référencer ces lignes par leur champ de données sans parcourir toutes les lignes, mais je ne l'ai pas trouvé au premier coup d'œil.

Merci pour l'aide!