2010-10-11 12 views
7

Estoy intentando simplemente añadir un texto simple o campo de hipervínculo a un elemento de lista en SharePoint 2007.establecer mediante programación el valor del campo de listitem SharePoint

puedo agregar el campo no hay problema:

list.Fields.Add("MyField",SPFieldType.Text, false); 

Y aparece bien en mis artículos de la lista. Sin embargo, no importa de qué manera lo intente, no puedo establecer un valor programáticamente para el campo. Probé:

list.items[0]["MyField"] = "text"; 

y yo tratamos de carga en un campo:

SPField field = list.items[0].Fields["MyField"]; 

y se establece allí, y establecer el valor por defecto y puesta al día, pero nada de lo que nunca ocurre.

Siempre termino mis bloques de código con list.update(); o si estoy operando en el elemento en sí item.update(); así que al menos no me estoy perdiendo eso. ¿Alguien puede decirme lo que estoy haciendo mal?

Gracias

+0

¿Están habilitados los ContentTypes en la lista? – cement

+0

No, no lo son. – Dynde

Respuesta

10

Probar:

SPListItem item = list.items[0]; 
item["MyField"] = "text"; 
item.Update(); 

Aunque parece equivalente, el código anterior no es lo mismo que:

list.items[0]["MyField"] = "text"; 
list.items[0].Update(); 

Para obtener más información, consulte here y here para las personas que han documentado el mismo comportamiento

+1

¿Por qué diablos iban a estropear los indexadores tan mal? :/ – Dynde

+0

@Dynde No lo hacen. Esto no es diferente de si un tipo de valor fue devuelto y modificado. Es solo que se devuelve un * nuevo * objeto. –

3

Podría probar esto por la adición de un nuevo campo y establecer un valor por defecto? Código no probado. Déjame saber como va.

SPFieldText fldName = (SPFieldText)list.Fields.CreateNewField(SPFieldType.Text.ToString(), "mycolumn"); 
fldName.DefaultValue = "default"; 
list.Fields.Add(fldName); 
list.Update(); 
+0

Mismo trato - campo creado con éxito - sin ningún valor ... – Dynde

+0

¡Extraño! Prueba el código y funciona bien para mí. – Shoban

0

De todo lo expuesto anteriormente se deduce que usted está tratando de establecer el valor del campo en un manejador de lista de eventos y está configurando el valor en el punto de añadir o actualizar elemento evento. Si este es el caso, entonces debe considerar AfterProperties. Recuerde que tenemos eventos * ing y * ed y en el caso de eventos * ing, necesitamos trabajar con BeforeProperties y AfterProperties.

Espero que esto ayude!

Cuestiones relacionadas