Foros del Web » Programación para mayores de 30 ;) » .NET »

Datagrid,columna textbox html,el cliente pueda mofificarlo dinamicamente

Estas en el tema de Datagrid,columna textbox html,el cliente pueda mofificarlo dinamicamente en el foro de .NET en Foros del Web. tengo una columna modificable por el cliente (un campo observaciones) en un grid. Quiero que cuando se porduzca el evento onchanged (Cuando se cambie el ...
  #1 (permalink)  
Antiguo 20/07/2005, 02:40
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 2 meses
Puntos: 1
Datagrid,columna textbox html,el cliente pueda mofificarlo dinamicamente

tengo una columna modificable por el cliente (un campo observaciones) en un grid.
Quiero que cuando se porduzca el evento onchanged (Cuando se cambie el valor del texbox) capturar esto para luego modificarlo en el lado del servidor una vez que pulse un boton guardar cambios(cuando haya modificado todas las observacioens q kiera de todos lso profes...).

Entonces en un primer momento tengo en el onchanged de este texbox esto:
onchange='javascript:add( "<%# (Container.Dataitem ("dni")).toString %>" ) ;'

add es una funcion javascript q demomento recoje el dni del profesor al que se le cambia la obsercaion,me falta pasarle el texto de este textbox.Como identifico el texto del textbox que esta siendo modificado entre todos las filas del datagrid???

(trabajo con una aplicacin web pero la columna template columns tiene asignado un textbox html para hacer todo priemro en el lado del cliente,lo que va recojuendo la funcion add la almacena en un texbox de momento con document.getElementById('text').value,esto luego cdo pulse el boton sera apsado al servidor donde hara las modificaciones oportunas en la BD)

Gracias
  #2 (permalink)  
Antiguo 20/07/2005, 03:25
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Buenas Neivan,

te recomiendo que a tus textbox del datagrid les pongas un name y un id identificativo de cada fila, por ejemplo:

name="text<%# DatBinder.Eval(Container.DataItem("dni")) %>" id="text<%# DataBinder.Eval(Container.DataItem("dni")) %>"

y luego desde if ispostback, una vez que tienes los valores separados del text auxiliar (donde recoges los dnis)

dim observaciones as string = request.Form("text" & dni(i))


PD: Como ves cuando lo hicimos de la otra manera, hicimos trabajo de más. Así es mucho más comodo.
  #3 (permalink)  
Antiguo 20/07/2005, 03:55
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 2 meses
Puntos: 1
Joe,asi no habria q utilizar eventos que carguen una cadena para luego mandarla al servidor.
Entonces el name lleba asociado el dni como nombre y el id tb por lo que sera unico,aunq ahora q lo pienso la otra vez lo hicimos con tanta vuelta por que almacenabamos exactamente los checks que klicaba para luego no recorrer todos y perder tiempo haciendo update de todas las filas....
Voy a progar a ver si me funciona asi y te comento
  #4 (permalink)  
Antiguo 20/07/2005, 04:07
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Es verdad,los identificadores te sigo recomendando meterlos en un textbox auxiliar, para no tener que recorrer todo el datagrid, pero después los textos puedes recogerlos así.

Lo de la otra vez resulto tan enrevesao, xq creo que había que mirar si ya estaba seleccionado al principio y se quitaba o si estaba y se dejaba o si no estaba y se ponía, no????
  #5 (permalink)  
Antiguo 20/07/2005, 04:07
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Lo de poner ambos (id y name) es para que te valga tanto para IE como para FireFox, si es solo para IE con el id te vale.
  #6 (permalink)  
Antiguo 20/07/2005, 04:33
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 2 meses
Puntos: 1
Despues de este tengo q hacer otro donde aparezcan 2 columnas editables,fecha final y precio,son unos cursos que son especiales a gusto del alumno por aprte del instituto,la cosa seria q si le meto el codigo de turno ,solo podria hacerlo con uno de las 2 columnas
Supongo que se le podra por ejemplo al codigo de turno añadirle una letra q le haga diferente al otro textbox.

Bein entonces,los indentificadores los meto en una cadena,y luego recogo asi el texto de lso identificadores en los q haya habido cambios.
Perfecto.

por parte de lo checks,metiamos en uan cadena lso q iba chekeando y comprobabamos si este check lo volvia a dejar como estaba en la cadena,haceindo un control bastante completo de esto para lo cual solo se guardan los checks q cambian.
  #7 (permalink)  
Antiguo 20/07/2005, 04:58
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 2 meses
Puntos: 1
Me da un error :

Overload resolution failed because no accessible 'Eval' accepts this number of arguments.


en la linea del html en la que configuro el name y el id:

<input type="text" name='text<%# DataBinder.Eval(Container.DataItem("code")) %>' id='text<%# DataBinder.Eval(Container.DataItem("code")) %>' text='<%# Container.Dataitem ("Observaciones") %>' onchange='javascript:add( "<%# (Container.Dataitem ("code")).toString %>" ) ;' />
  #8 (permalink)  
Antiguo 20/07/2005, 05:14
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
ok, no pongas el databinder.eval, hazlo como en la función add, es decir, sólo con container.dataitem, eso es por la forma en que cargas el grid.
  #9 (permalink)  
Antiguo 20/07/2005, 05:15
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Y con respecto a las 2 columnas, exactamente como dices, una podría ser

columA más el identificador y la otra columB + identificador, o como ya quieras.
  #10 (permalink)  
Antiguo 20/07/2005, 05:26
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 2 meses
Puntos: 1
ya no da error ,ala tarde lo pruebo y dejo un resumen de como keda para la gente que kiera hacer lo mismo....
Gracias de nuevo
  #11 (permalink)  
Antiguo 20/07/2005, 08:17
Avatar de neivan  
Fecha de Ingreso: febrero-2005
Mensajes: 539
Antigüedad: 19 años, 2 meses
Puntos: 1
Ya me va perfecto.

En resumen,para poder actualizar una columna de tipo texto rapidamente sin tener que ir fila por fila editando y guardando.

Primero añadimos una columna de tipo template column y le metemos un textbox de tipo html.

Relacionamos el textbox con el campo de la bd :
Yo lo hago asi:
<input type="text" .... value='<%# Container.Dataitem ("Observaciones") %>'

De alguna manera es interesante ir sabiendo que textos han sido modificados para lo cual edito el evento onChanged en el lado de lcliente y voy alamcenando en una cadena a traves de una función javascript los que va cambiando.

<input type="text" ..... onchange='javascript:add( "<%# (Container.Dataitem ("code")).toString %>" ) ;'

<head>
<script>
function add(valor)
{


var inf = document.getElementById('text').value;
if (inf.indexOf(valor)==-1)
{
document.getElementById('text').value = document.getElementById('text').value + valor + "#";

}


//document.getElementById('text').setAttribute('valu e',document.getElementById('text').getAttribute('v alue')+valor);

}

</script>
</head>
La cadena la almaceno en :
<input id="text" type="hidden" name="text" />

Ya tengo indentificados los textos que se han modifcado en uan cadena,a traves de un codigo identificativo para cada una de als filas q me apsa la cosulta y q le he llamado cod.

Bien esta cadena la puedo pasar al servidor con un boton :

<input id="button1" onclick='alert("Se dispone a guardar las obervaciones.");javascript:__doPostBack("Guardar", document.getElementById("text").value);' type="button" value="Guardar" name="button1" runat="server" />

y lo recojo de este modo en el page load:

Page.GetPostBackEventReference(Page)
if request.form.item("__eventtarget") = "Guardar" then
dim cadena as string cadena=Convert.toString(request.Form.Item("__event argument"))
end if


bien ahora nos quedaria tener a mano el texto de cada fila.Para identificar a cada texto le asignamos a su name y su id este coigo q pasamos en la cadena.

<input type="text" name='text<%# Container.Dataitem ("code") %>' id='text<%# Container.Dataitem ("code") %>' ...

de esta manera con un simple :

request.Form("text" & codigo)
El codigo lo sacariamos de la cadena que pasamos anteriomente por lo que
tendriamos el texto ya y el codigo al q corresponde

Solo quedaria la update en un bucle q recorra los diferentes codes pasados.salu2
  #12 (permalink)  
Antiguo 20/07/2005, 10:55
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
enhorabuena!!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:58.