Menú desplegable en los items de un SPGridView

11/11/2008 - 20:00 por perilludo | Informe spam
Buenas a todos y gracias de antemano por vuestro tiempo.

Antecedentes:
Cargo desde BBDD un SPGridView. Intento que se muestre el menú emergente
sobre cada fila del SPGridView con las opciones "Editar" y "Eliminar". Lo he
conseguido.

Problema:
Al seleccionar "Eliminar" lanzo un doPostBack con un token del tipo %ITEM%.
Según he leido por la red estos tokens se reemplazan en cliente para cada
fila del Grid:

http://social.msdn.microsoft.com/Fo...598205c30/

Pues en mi caso no lo reemplaza.

También he leido que hay que construir una tabla que resuelve estos tokens,
pero no entiendo nada en el artículo porque falta código o no sé de donde
salen ciertas variables:

http://msdn.microsoft.com/en-us/lib...cript.aspx

¿Alguien sabe como se manejan estos tokens?

Me gustaría resolverlo de manera elegante y no hacer un reemplazo javascript
a lo "salvage".

Muchas gracias de nuevo
 

Leer las respuestas

#1 Ramon Torras
12/11/2008 - 13:14 | Informe spam
Hola Perilludo,

El tema es poner la id cuando haces el menuitem
colMenu.NavigateUrlFields = "ID,LinkFilename";
colMenu.NavigateUrlFormat = web.Url +
"/_layouts/FormServer.aspx?XmlLocation=/PeticionesClearance/{1}&DefaultItemOpen=1&Source=" + httpRequest.Url;
colMenu.TokenNameAndValueFields = "EDIT=ID,NAME=LinkFilename";

{1} es el primer parametro en este caso ID
{2} es el segundo parametro en este caso LinkFilename


Te pongo un trozo de mi codigo para que te hagas una idea:

oGrid = new SPGridView();
oGrid.DataSource = dt;
//oGrid .DataSource= ds;
oGrid.AutoGenerateColumns = false;
oGrid.Columns.Clear();

//BuildColumns(view, oGrid);




//--Columna con
menu--

HttpRequest httpRequest = HttpContext.Current.Request;

SPMenuField colMenu = new SPMenuField();
colMenu.HeaderText = "Solicitud";
//colMenu.TextFields =
"_x007b_3efc2875_x002d_664e_x002d_456b_x002d_9e68_x002d_301ce5c9cfc6_x007d_";
//Titulo Solicitud
colMenu.TextFields = "Titol"; //Titulo Solicitud

colMenu.MenuTemplateId = "ListMenu";
colMenu.NavigateUrlFields = "ID,LinkFilename";
colMenu.NavigateUrlFormat = web.Url +
"/_layouts/FormServer.aspx?XmlLocation=/PeticionesClearance/{1}&DefaultItemOpen=1&Source=" + httpRequest.Url;
colMenu.TokenNameAndValueFields = "EDIT=ID,NAME=LinkFilename";
colMenu.SortExpression = "Title";

MenuTemplate ListMenu = new MenuTemplate();
ListMenu.ID = "ListMenu";
MenuItemTemplate biogMenu = new MenuItemTemplate(
"Ir a la solicitud", "/_layouts/images/icxddoc.gif");
//biogMenu.ClientOnClickNavigateUrl =
"do.aspx?this=%EDIT%&that=%NAME%&Source=" + httpRequest.Url;
biogMenu.ClientOnClickNavigateUrl = web.Url +
"/_layouts/FormServer.aspx?XmlLocation=/PeticionesClearance/%NAME%&DefaultItemOpen=1&Source=" + httpRequest.Url;
//entry.ClientOnClickScript = "your javascript here";
ListMenu.Controls.Add(biogMenu);

this.Controls.Add(ListMenu);

oGrid.Columns.Add(colMenu);

//
//
BoundField t1 = new BoundField();
t1.DataField =
"_x007b_b27d5fdf_x002d_1fb0_x002d_4ea2_x002d_9316_x002d_952ce52e56a1_x007d_";
//Ref Solicitud
t1.HeaderText = "Número";
t1.SortExpression =
"_x007b_b27d5fdf_x002d_1fb0_x002d_4ea2_x002d_9316_x002d_952ce52e56a1_x007d_";
oGrid.Columns.Add(t1);
//
BoundField t3 = new BoundField();
t3.DataField =
"_x007b_d95b19bc_x002d_6889_x002d_483a_x002d_bd74_x002d_fde3fe13f028_x007d_";
//Resultado
t3.HeaderText = "Tipo Actividad";
oGrid.Columns.Add(t3);

BoundField t4 = new BoundField();
t4.DataField = "Author";
t4.HeaderText = "Creado por";
oGrid.Columns.Add(t4);

BoundField t5 = new BoundField();
t5.DataField = "Created";
t5.HeaderText = "Creado";
oGrid.Columns.Add(t5);


BoundField t6 = new BoundField();
t6.DataField =
"_x007b_d91eb2c0_x002d_8122_x002d_4943_x002d_a91a_x002d_1a604948ff3c_x007d_";
t6.HeaderText = "Responsable de la Actividad";
oGrid.Columns.Add(t6);

BoundField t7 = new BoundField();
t7.DataField = "EstadoWF";
t7.HeaderText = "Estado de Solicitud";
oGrid.Columns.Add(t7);

BoundField t8 = new BoundField();
t8.DataField = "Clearanc";
t8.HeaderText = "Estado de Solicitud";
oGrid.Columns.Add(t8);
t8.Visible = false;


Saludos
Ramon Torras
http://www.ibetania.es


"perilludo" wrote:

Buenas a todos y gracias de antemano por vuestro tiempo.

Antecedentes:
Cargo desde BBDD un SPGridView. Intento que se muestre el menú emergente
sobre cada fila del SPGridView con las opciones "Editar" y "Eliminar". Lo he
conseguido.

Problema:
Al seleccionar "Eliminar" lanzo un doPostBack con un token del tipo %ITEM%.
Según he leido por la red estos tokens se reemplazan en cliente para cada
fila del Grid:

http://social.msdn.microsoft.com/Fo...598205c30/

Pues en mi caso no lo reemplaza.

También he leido que hay que construir una tabla que resuelve estos tokens,
pero no entiendo nada en el artículo porque falta código o no sé de donde
salen ciertas variables:

http://msdn.microsoft.com/en-us/lib...cript.aspx

¿Alguien sabe como se manejan estos tokens?

Me gustaría resolverlo de manera elegante y no hacer un reemplazo javascript
a lo "salvage".

Muchas gracias de nuevo

Preguntas similares