¿Puedo cargar una lista desplegable con una lista de SharePoint para establecer una propiedad de pieza web personalizada?
-
16-10-2019 - |
Pregunta
Encontré esta publicación que afirma mostrarle cómo hacerlo:
Pero después de seguir cuidadosamente las instrucciones y descargar el código, no he podido hacer que funcione como se esperaba.
Publiqué una pregunta similar aquí, pero las respuestas solo me dijeron cómo podría cargar una lista desplegable con valores estáticos. Me gustaría cargarlo desde una lista de SharePoint.
Solución
Abe dijiste:
Descargué la fuente, pero solo parece funcionar con la lista desplegable estática de elementos. Seguí sus instrucciones, pero nunca pude hacer que el menú desplegable funcionara con una lista interna. ¿Es posible hacer esto siguiendo las instrucciones que ha proporcionado? Si es así, ¿sería posible que publique el código de trabajo para eso?
En la fuente debe agregar una anulación de CreateEditorParts
public override EditorPartCollection CreateEditorParts() {
ArrayList editorArray = new ArrayList();
MyEditorPart edPart = new MyEditorPart();
edPart.ID = this.ID + "_editorPart1";
editorArray.Add(edPart);
EditorPartCollection editorParts = new EditorPartCollection(editorArray);
return editorParts;
}
Por lo tanto, el WebPart utilizará las piezas de editor personalizadas.
Otros consejos
Tengo una parte de herramienta personalizada que se lee desde una base de datos, pero podría cambiarla para leer desde una espinilla en su lugar
public class CustomToolPart : ToolPart {
protected override void CreateChildControls() {
ddlCustom = new DropDownList();
ddlCustom.ID = "ddlCustom";
ddlCustom.ToolTip = "Custom";
try {
using (SqlConnection conn = new SqlConnection(this.webPart.ConnectionString)) {
conn.Open();
SqlCommand cmd = new SqlCommand(@"select id,name from [sometableftdb_forums]", conn);
SqlDataAdapter rs = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
rs.Fill(ds, "Data");
ddlCustom.DataSource = ds;
ddlCustom.DataTextField = "name";
ddlCustom.DataValueField = "id";
ddlCustom.DataBind();
ddlCustom.Items.Insert(0, new ListItem("(choose)", "0"));
}
//instead add code here for SPSite/SPWeb/SPList
} catch (SqlException ex) {
ddlCustom.Items.Insert(0, new ListItem("(sql error)", "0"));
}
ListItem item = ddlCustom.Items.FindByValue((webPart != null ? webPart.CustomValueId : 0).ToString());
if (item != null) {
ddlCustom.SelectedIndex = -1;
item.Selected = true;
}
Controls.Add(ddlCustom);
}
}