2013-06-04 2 views
2

Je suis de PHP, et je ne pense pas comprendre comment marcher correctement dans les structures de données. La documentation de SPFieldCollection.Add est assez clair quel genre d'arguments qu'il faut, j'ai donc écrit une classe qui:Listes et Valeurs de la liste en C#

namespace SPAPI.Lists.Add 
{ 
    class AddParams 
    { 
     public SPFieldType type { get; set; } 
     public bool required { get; set; } 
    } 
} 

De là, je créé une liste qui fait:

public Create(SPFeatureReceiverProperties properties, Dictionary<string, List<AddParams>> columns, string name, string description, SPListTemplateType type) 
{ 
    SPSite siteCollection = properties.Feature.Parent as SPSite; 
    if (siteCollection != null) 
    { 
     SPWeb web = siteCollection.RootWeb; 
     web.Lists.Add(name, description, type); 
     web.Update(); 

     // Add the new list and the new content. 
     SPList spList = web.Lists[name]; 
     foreach(KeyValuePair<string, List<AddParams>> col in columns){ 
      spList.Fields.Add(col.Key, col.Value[0], col.Value[1]); 
     } 

     // More Code ... 
    } 
} 

Le problème est, il n'aime pas col.Value[0], col.Value[1] parce que l'un n'est pas un SPFieldType et l'autre n'est pas un boolean par définition stricte. Je pense que j'ai la bonne idée, mais je cherche des conseils sur la façon de faire ce travail.

Parce que C# est de type laissant entendre que je supposais qu'il utiliserait la classe AddParams pour voir les types.

L'idée est de passer dans une série de params et de créer une nouvelle liste en fonction de ces params.

Ceci est plus d'une question C# et la question de la structure de données d'itération alors une question de développement de SP.

+0

Avez-vous essayé coulée col.Value [0] et col.Value [1] à leurs types respectifs? – Rubixus

+0

@Rubixus Cast ce que ... ces deux seraient AddParams, juste le premier et le second. – DonBoitnott

+0

@Don Peut-être que je n'ai pas compris votre question. Pour moi, il semblait que votre problème était que col.Value [0] devrait être ajouté à Fields en tant que SPFieldType, et col.Value [1] devrait être booléen. Mais après avoir vu la réponse d'Igor, je vois ce que tu cherchais. – Rubixus

Répondre

1

changement

spList.Fields.Add(col.Key, col.Value[0], col.Value[1]); 

à

spList.Fields.Add(col.Key, col.Value[0].type, col.Value[0].required); 
4

Les deux col.Value[0] et col.Value[1] sont du type AddParams. Ce sera probablement la compilation:

spList.Fields.Add(col.Key, col.Value[0].type, col.Value[0].required); 

mais vous devez probablement une autre foreach dans votre foreach:

foreach(AddParams item in col.Value) 
{ 
} 
-1

Pourquoi avez-vous la liste de AddParams? Attendez-vous plus de 1 FieldType pour le même domaine?

Je pense que vous devriez la mettre en œuvre ainsi:

public Create(SPFeatureReceiverProperties properties, Dictionary<string, AddParams> columns, string name, string description, SPListTemplateType type) 
{ 
    SPSite siteCollection = properties.Feature.Parent as SPSite; 
    if (siteCollection != null) 
    { 
     SPWeb web = siteCollection.RootWeb; 
     web.Lists.Add(name, description, type); 
     web.Update(); 

     // Add the new list and the new content. 
     SPList spList = web.Lists[name]; 
     foreach(string key in columns.Keys){ 
      spList.Fields.Add(key, columns[key].type, columns[key].required); 
     } 

     // More Code ... 
    } 
} 
Questions connexes