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

NO recupero en DAtagrid el valor de EditItemTemplate

Estas en el tema de NO recupero en DAtagrid el valor de EditItemTemplate en el foro de .NET en Foros del Web. HOla estoy itentando hacer un update para actualizar un datagrid pero no consigo recuperar el valor que modifica el usuario. Lo intento asi pero nada: ...
  #1 (permalink)  
Antiguo 11/07/2005, 02:56
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
NO recupero en DAtagrid el valor de EditItemTemplate

HOla estoy itentando hacer un update para actualizar un datagrid pero no consigo recuperar el valor que modifica el usuario.

Lo intento asi pero nada:

TextBox dat = new TextBox();
dat = (TextBox)e.Item.FindControl("txtdato");
response.write(dat.text);

El problema es que me saca el valor antiguo y noel que cambia el usuario.

gracias
  #2 (permalink)  
Antiguo 11/07/2005, 03:38
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
Debe tener alguna propiedad especifica el datagrid para que no me saque el valor antiguo sino el que modifica el usuario????

gracias.
  #3 (permalink)  
Antiguo 11/07/2005, 07:41
Avatar de splinter  
Fecha de Ingreso: junio-2004
Ubicación: Misantla,Ver.Mexico
Mensajes: 181
Antigüedad: 19 años, 10 meses
Puntos: 0
saludos,

Evita que el grid se recargue en el page_load al hacer el postback
  #4 (permalink)  
Antiguo 11/07/2005, 08:47
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Que evento estas usando para tu datagrid..??

Coloca una parte del code que tienes tanto en modo html como en el codebehind..

Y también checa lo que comenta splinter

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #5 (permalink)  
Antiguo 11/07/2005, 08:58
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
EL problema era el que decia spliter que lo recargaba en el load y me cogia el valor inicial, pero ya lo solucione.
Ahora tengo un grid de este tipo:

Nombre Dato
IpGestion 127.0.0.1
IpPrivada 127.0.0.1
Empresa Tedema
CodCli CXXX-NNMM

Y me gustaria poder recuperar el valor: 127.0.0.1 de la ipgestion pero no se como.
he probado asi pero nada:

DataGrid1.Items[1].Cells[2].Text;

gracias
  #6 (permalink)  
Antiguo 11/07/2005, 09:00
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Como estás llenando tu datagrid..?? con boundcolumns or itemtemplates..??

Coloca tu html..
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #7 (permalink)  
Antiguo 11/07/2005, 09:52
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
YO cargo la pagina con BoundColumn, creo.
Es que ahora no tengo delante el codigo pero las columnas las cree con el asistente y las converti a plantilla.

Sabrias decirme como puedo acceder a ese dato???


gracias
  #8 (permalink)  
Antiguo 12/07/2005, 01:33
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
MI codigo html

Pues este es el codigo:

<asp:datagrid id="DataGrid1" runat="server" CssClass="datagrid" UseAccessibleHeader="True" AutoGenerateColumns="False"
Caption="Clientes con nodos contratados a Soluziona" PageSize="30" AllowPaging="True" GridLines="None">
<Columns>
<asp:TemplateColumn>
<HeaderStyle Width="150px"></HeaderStyle>
<ItemTemplate>
<asp:LinkButton id="Linkbutton1" runat="server" Text="Editar" CommandName="Edit"></asp:LinkButton>
<asp:LinkButton id="Linkbutton2" runat="server" Text="Borrar" CommandName="Delete"></asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton id="Linkbutton3" runat="server" Text="Cancelar" CommandName="Cancel"></asp:LinkButton>
<asp:LinkButton id="Linkbutton4" runat="server" Text="Actualizar" CommandName="Update"></asp:LinkButton>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Nombre">
<ItemTemplate>
<asp:Label id="lblnombre" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Nombre") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Dato">
<ItemTemplate>
<asp:Label id=Label1 runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Dato") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id=txtdatos runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Dato") %>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
</Columns>
<PagerStyle HorizontalAlign="Center" Mode="NumericPages"></PagerStyle>
</asp:datagrid>

Mi problema es que mi datagrid muestra por pagina los datos de un nodo, es decir de esta forma:

Nombre Dato
Editar IpGestion 127.0.0.1
Editar IpPrivada 127.0.0.1
Editar Empresa Tedema
Editar CodCli CXXX-NNMM
Editar Hostname Enterprise

entonces tengo que recuperar en cada pagina (xq tiene que en cada pagina de la paginacion un nodo diferente) la ipgestion para poder actualizarlo, pero no se como sacar en cada caso este dato.

Se agradeceria cualquier idea.


gracias

Última edición por Nombela; 12/07/2005 a las 05:59
  #9 (permalink)  
Antiguo 12/07/2005, 06:50
Avatar de splinter  
Fecha de Ingreso: junio-2004
Ubicación: Misantla,Ver.Mexico
Mensajes: 181
Antigüedad: 19 años, 10 meses
Puntos: 0
Aqui un ejemplo de mi codigo usando templates y boundcolumns, en el evento update.

Private Sub GridMetricWE_UpdateCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataGridCommandEventArgs ) Handles GridMetricWE.UpdateCommand
'Actualizacion de los valores
Dim value1, value2 As String
Dim orderID As String
Dim DateID As String
value1 = (CType(e.Item.FindControl("txtValue"), Infragistics.WebUI.WebDataInput.WebNumericEdit).Te xt) '*template
value2 = (CType(e.Item.FindControl("txtValue2"), Infragistics.WebUI.WebDataInput.WebNumericEdit).Te xt) '*template
orderID = (e.Item.Cells(0).Text) '*boundcolumn
DateID = (e.Item.Cells(2).Text) '*boundcolumn
...
...
end sub
  #10 (permalink)  
Antiguo 12/07/2005, 06:54
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
CAso aparte

Eso funcionaria si no fuera que en mi datagrid por cada pagina hay un solo registro y yo lo que quiero recuerpar es el principio del registro, el id.


Gracias.
  #11 (permalink)  
Antiguo 12/07/2005, 08:20
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Ya revisaste que en tu evento ItemDataBound de tu datagrid estés recuperando el valor.

Sería algo como ésto:

Cita:
Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound

If e.Item.ItemType = ListItemType.EditItem Then
Dim txt As TextBox = CType(e.Item.FindControl("txtdatos "), TextBox)
response.write(txt.text);
End If

End Sub
Checalo y nos cuentas que tal..
  #12 (permalink)  
Antiguo 12/07/2005, 16:08
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
MI problema es que yo ya recojo el valor de la fila que selecciona, ahora lo que quiero es recoger el valor de la primera fila xq es ahi donde esta la clave principal para poder hacer el update.

Ahi alguna posibilidad de sacar el dato ese??
  #13 (permalink)  
Antiguo 12/07/2005, 16:33
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Cita:
lo que quiero es recoger el valor de la primera fila xq es ahi donde esta la clave principal para poder hacer el update.
Y no sería mas fácil colocarle la llave que estas usando a tu datagrid..

algo como ésto:

Cita:
<asp:datagrid id="DataGrid1" runat="server" CssClass="datagrid" UseAccessibleHeader="True" AutoGenerateColumns="False"
Caption="Clientes con nodos contratados a Soluziona" PageSize="30" AllowPaging="True" GridLines="None" DataKeyField="tu_campoID" >
Y ya por code lo recuperas..(en tu evento update, o donde lo necesites)

Cita:
Dim itemID As Integer = CType(DataGrid1.DataKeys(e.Item.ItemIndex), Integer)

Ojala sea lo que buscas..
  #14 (permalink)  
Antiguo 13/07/2005, 02:19
Avatar de Nombela  
Fecha de Ingreso: abril-2005
Mensajes: 611
Antigüedad: 19 años, 1 mes
Puntos: 1
PRoblema con el datakeyfield

La idea del datakey field es muy buena pero no consigo que me funcione.

Mira aqui te pongo como cargo el DataGrid:

private void CargarGrid()
{
string connectionString = ConfigurationSettings.AppSettings["conexion"];
SqlConnection conexion= new SqlConnection(connectionString);
SqlCommand comando= conexion.CreateCommand();
comando.CommandText = "SELECT DISTINCT Nodos.IpGestion, Nodos.IpPrivada, Nodos.Empresa, Nodos.CodCli, Nodos.Hostname, Nodos.Descripcion, Nodos.Fabricante, Nodos.PartNumber, "+
"Nodos.NSerie, Nodos.NSlots, Nodos.ComunidaLectura, Nodos.InterfacesMonitorizar, Nodos.Direccion, Tarjetas.SlotsInstalacion, "+
"Tarjetas.NSerie AS Expr2, Tarjetas.PartNumber AS Expr3, Tarjetas.Descripcion AS Expr4, Nodos.Ciudad, Nodos.Provincia, Nodos.NombrePersona, "+
"Nodos.TelefonoPersona, Nodos.EmailPersona, Nodos.DireccionPersona, Nodos.Comentario, Nodos.TipoMantenimiento, "+
"Nodos.EmpresaMantenimiento, Nodos.PersonaMantenimiento, Nodos.TelefonoMantenimiento, Nodos.EmpresaClienteMantenimiento, "+
"Nodos.CodClienteMantenimiento FROM ServiciosNodos INNER JOIN Nodos ON ServiciosNodos.NodoIpGestion = Nodos.IpGestion INNER JOIN "+
"Servicios ON ServiciosNodos.ServId = Servicios.ServId INNER JOIN UsuariosServicios ON Servicios.ServId = UsuariosServicios.UsServIdServ INNER JOIN Usuarios INNER JOIN "+
"Clientes ON Usuarios.UsIdCli = Clientes.UsIdCli ON UsuariosServicios.UsServIdUs = Usuarios.UsId INNER JOIN Tarjetas ON Nodos.IdTarjeta = Tarjetas.IdTarjeta WHERE (Clientes.UsIdCli = "+Request.QueryString["id"].ToString()+")";

// Execute the command
conexion.Open();
SqlDataReader reader = comando.ExecuteReader();

//Create the DataTable
DataTable dt = new DataTable ();
//Create the columns
DataColumn dcName = new DataColumn("Nombre");
DataColumn dcDato = new DataColumn("Dato");

//Add the columns to the DataTable's Columns collection
dt.Columns.Add(dcName);
dt.Columns.Add(dcDato);
DataRow fila;
while(reader.Read())
{
for(int i=0;i<reader.FieldCount;i++)
{
fila = dt.NewRow();
fila["Nombre"] = reader.GetName(i);
fila["Dato"] = reader[i];
dt.Rows.Add(fila);
}
}
DataGrid1.DataSource = dt;
DataGrid1.HeaderStyle.CssClass="header";
DataGrid1.AlternatingItemStyle.CssClass="par";
DataGrid1.DataBind();
reader.Close();
conexion.Close();
}

y en el datakeyfield pongo DataKeyField="IpGestion" pero me dice DataBinder.Eval: 'System.Data.DataRowView' does not contain a property with the name IpGestion.

ALguien sabe xq????

gracias
  #15 (permalink)  
Antiguo 13/07/2005, 08:19
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
2 cosas.

1.- No te sale el IpGestion porque no lo estás incluyendo en tu datatable.. y recuerda que ese objeto es el que le estas pasando a tu datagrid.

Quedaría mas o menos así:

Cita:
//Create the columns
DataColumn dcName = new DataColumn("Nombre");
DataColumn dcDato = new DataColumn("Dato");
DataColumn dcIpGestion = new DataColumn("IpGestion");
...
...
dt.Columns.Add(dcIpGestion );
....
...
fila = dt.NewRow();
fila["Nombre"] = reader.GetName(i);
fila["Dato"] = reader[i];
fila["IpGestion"] = reader[i];
dt.Rows.Add(fila);

2.- Porque estas creando un datatable si tienes el el reader la información que necesitas..??
bastaría con que hicieras ésto:

Cita:
....
conexion.Open();
SqlDataReader reader = comando.ExecuteReader();

DataGrid1.DataSource = reader;
DataGrid1.HeaderStyle.CssClass="header";
DataGrid1.AlternatingItemStyle.CssClass="par";
DataGrid1.DataBind();
reader.Close();
conexion.Close();
Pero bueno.. son ideas... espero te sirvan..
  #16 (permalink)  
Antiguo 16/04/2009, 05:45
 
Fecha de Ingreso: abril-2009
Mensajes: 1
Antigüedad: 15 años
Puntos: 0
Respuesta: NO recupero en DAtagrid el valor de EditItemTemplate

Hola!!
tengo unas duda y por mas que busco por intenet y leo foros no logro resolverla del todo!A ver os comento:
tengo un gridvview donde metos datos sobre unos proyecto que tengo activos en una base de datos. este gridview tiene atributos correspondiente a los proyectos mas dos botons:
<asp:CommandField ButtonType="Button" ShowEditButton="True" />
<asp:CommandField ButtonType="Button" ShowDeleteButton="True" />

para poder modificar algunos datos de los proyectos disponibles en la tabla.

Respecto al codigo asp:
<asp:templatefield headertext="Autor">
<itemtemplate> <%#eval("AutorProy")%> </itemtemplate>
<edititemtemplate>
<asp:textbox id="ctAutorProy" text='<%#bind("AutorProy")%>' runat="server"/>
</edititemtemplate>
</asp:templatefield>

creo que esta bien, y si no es asi me gustaria que me comentarais...

y respecto a codigo visual basic,en GridView1_RowUpdating no se muy bien como solucionar el problema. Quiero tomar los datos moficados de la caja de texto autor del gridview para poder incorporarlos a una base de datos. Este es la primar parte del codigo (sin las conexiones a la base de datos)

dim indice As Integer
Dim proyectoAModificar As String
Dim fila As GridViewRow

indice = e.RowIndex
proyectoAModificar = GridView1.DataKeys(indice).Value
'me recupera la fila a modificar
fila = GridView1.Rows(indice)

Dim autorAModificar As TextBox
Dim autor As String


autorAModificar = fila.FindControl("ctAutorProy").ToString

¿como hago para obtener el datos escrito en la caja de texto????
autorAmodificar me sale vacio!
  #17 (permalink)  
Antiguo 17/04/2009, 14:35
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Respuesta: NO recupero en DAtagrid el valor de EditItemTemplate

Basta con hacer un cast

Cita:
...
...
Dim autorAModificar As TextBox
Dim autor As String

autorAModificar = CType(fila.FindControl("ctAutorProy"), TextBox)
Dim resultado =autorAModificar.Text
...
P.D. Cualquier otra pregunta abrir un nuevo post y/o verificar la fecha del último comentario para no reabirir temas que tienen ya varios años

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
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 09:19.