2010-07-09 1 views
0

Je vais essayer d'expliquer le scénario.Modification de Gridview selon les propriétés de la table

J'ai une grille que je souhaite modifier en fonction des préférences qu'un utilisateur peut définir. Ces préférences sont stockées dans une table dans un EDMX (tblPref). Le tableau donne la préfé- rence, c'est-à-dire le produit, l'alias pour la préférence, c'est-à-dire le SKU, et si la préférence devrait être affichée, c'est-à-dire ShowProduct?

Ainsi, par exemple, la « grille standard » ressemblerait à ceci:

Product UUF1 UUF2 
1  a  d 
2  b  e 
3  c  f 

tblPreference ressemblerait à ce qui suit:

Preference Alias ShowPreference 
Product Product  1 
UUF1  UUF1  1 
UUF2  UUF2  1 

Cependant, il peut être le cas que l'utilisateur peut souhaiter pour voir des colonnes différentes à savoir

Product  UUF2 
    1  d 
    2  e 
    3  f 

tblPreference ressemblerait à ce qui suit:

Preference Alias ShowPreference 
Product Product  1 
UUF1  UUF1  0 
UUF2  UUF2  1 

Et/Ou ils veulent étiqueter les en-têtes avec des textes à savoir

SKU Category Sub-Category 
    1  a  d 
    2  b  e 
    3  c  f 

tblPreference ressemblerait à ce qui suit:

Preference Alias ShowPreference 
Product SKU    1 
UUF1  Category  1 
UUF2  Sub-Category 1 

Maintenant, je me rends compte qu'il est possible pour cacher les colonnes (gridview.columns [0] .Visbile = False) et que je peux modifier le texte de l'en-tête (gridview.HeaderRow.Cells [0] .Text = "Sku"). Ce que je ne sais pas, c'est comment je l'apporte tout à fait ... la partie importante!

De toute évidence, quelques «ifs» seront impliqués, mais je me demandais si quelqu'un avait déjà fait quelque chose comme ça et pourrait fournir un peu de pseudo-code?

La raison pour laquelle je vais dans cette direction est que je pourrais avoir plusieurs centaines d'utilisateurs qui pourraient vouloir que le gridview leur apparaisse complètement différent. Étant un débutant, il est également bon pour moi d'essayer des choses plus difficiles plutôt que de «glisser-déposer».

Par conséquent toute aide fournie sera reçue avec reconnaissance.

Répondre

0

Si votre grille est configurée comme ceci dans le fichier aspx. Ensuite, vous devriez pouvoir utiliser le code ci-dessous pour créer dynamiquement les champs qui sont nécessaires dans la grille.

using (SqlConnection conn = new SqlConnection("MySqlConnectionString")) 
{ 
    conn.Open(); 
    SqlCommand cmd = new SqlCommand("select * from tblPreference"); // you will also have to limit this selection to only rows for this user. 
    cmd.Connection = conn; 
    using (SqlDataReader dr = cmd.ExecuteReader()) 
    { 
     while (dr.Read()) 
     { 
      if(dr.GetInt32(dr.GetOrdinal("ShowPreference"))==1) //not sure if this is a bit or int field 
      { 
       grid1.Columns.Add(new BoundField(){ 
        HeaderText = dr.GetString(dr.GetOrdinal("Alias")), 
        DataField = dr.GetString(dr.GetOrdinal("Preference")) 
       }); 
      } 

     } 
    } 
} 

Même si je suis sûr que cela devra être adapté un peu pour votre usage spécifique. Cela devrait vous donner un bon départ.Notez que après l'exécution de ce qui précède pour configurer vos colonnes, vous aurez toujours besoin de fournir la grille des données soit avec un contrôle DataSource ou par liaison manuellement comme ci-dessous

grid1.DataSource = MyDataReader; //or data table, or collection of objects 
grid1.DataBind(); 
+0

Merci beaucoup pour le eoldre de conseils. Je vais partir et jouer, mais cela me donne un point de départ fantastique - votre aide est grandement appréciée et je vous dois une pinte. –

0

Vous pouvez essayer de définir vos colonnes par programmation dans le code, plutôt que de manière déclarative dans le fichier aspx. Vous pourriez peut-être ajouter un gestionnaire pour l'événement DataBound, et vous pourriez créer votre BoundFields avec le texte d'en-tête dont vous avez besoin.