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

Problema Update DetailsView

Estas en el tema de Problema Update DetailsView en el foro de .NET en Foros del Web. Buenas. Tengo un problema con un DetailsView que no consigo que me actulice el valor de un campo. En modo edicion genero un TextBox para ...
  #1 (permalink)  
Antiguo 12/09/2008, 10:16
 
Fecha de Ingreso: julio-2008
Mensajes: 12
Antigüedad: 15 años, 9 meses
Puntos: 0
Problema Update DetailsView

Buenas.
Tengo un problema con un DetailsView que no consigo que me actulice el valor de un campo. En modo edicion genero un TextBox para introducir los datos, pero desde el evento Update no consigo encontrar el control TextBox para pasar los datos a la consulta Update.

La consulta Update funciona pues probando con un texto en el parametro se actualiza, asi que el problema pararece estar en que no encuentro el control.
¿Saben que me puede pasar?

Este es el codigo que tengo:

**************** ASP.NET *******************
<asp:DetailsView ID="solucionDetalle" runat=server AutoGenerateRows="False" OnModeChanging="solucionDetalle_ModeChanging" OnItemUpdating="solucionDetalle_ItemUpdating" >
<Fields>
<asp:BoundField DataField="Fecha" HeaderText="Fecha" ReadOnly="True" />
<asp:BoundField DataField="UserName" HeaderText="Consultor" ReadOnly="True" />
<asp:TemplateField HeaderText="Solucion">
<EditItemTemplate>
<asp:TextBox ID="solucionTextBox" runat="server" Text='<%# Bind("Solucion") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<asp:TextBox ID="solucionTextBox1" runat="server" Text='<%# Bind("Solucion") %>'></asp:TextBox>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Solucion") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowEditButton="True" />
</Fields>
<HeaderTemplate>
Solucion
</HeaderTemplate>
</asp:DetailsView>

************************* Code C# *********************

protected void solucionDetalle_ItemUpdating(object sender, DetailsViewUpdateEventArgs e)
{
// Leo el Data key con el que estoy trabajando
int consultaId = (int)solucionDetalle.DataKey.Value;
// Find the TextBox controls with updated data
TextBox nuevaSolucionTextBox = (TextBox)solucionDetalle.FindControl("solucionText Box");
// Extract the updated data from the TextBoxes
string newSolucion = nuevaSolucionTextBox.Text;

// Define data objects
SqlConnection conn;
SqlCommand comm;
// Initialize connection
string connectionString =
ConfigurationManager.ConnectionStrings[
"Pruebas"].ConnectionString;
// Initialize connection
conn = new SqlConnection(connectionString);
// Create command
comm = new SqlCommand("UPDATE SolucionConsultas SET Solucion=@Solucion WHERE ConsultaID=@ConsultaID",

conn);
// Add command parameters
comm.Parameters.Add("@ConsultaID", SqlDbType.Int);
comm.Parameters["@ConsultaID"].Value = consultaId;
comm.Parameters.Add("@Solucion", SqlDbType.NVarChar, 1000);
comm.Parameters["@Solucion"].Value = newSolucion;
//newSolucion;
// Enclose database code in Try-Catch-Finally
try
{
// Open the connection
conn.Open();
// Execute the command
comm.ExecuteNonQuery();
}
finally
{
// Close the connection
conn.Close();
}

//Exit edit mode
solucionDetalle.ChangeMode(DetailsViewMode.ReadOnl y);

// Reload the details view
BindSolucion();
}

protected void BindSolucion()
{
// El id de la consulta sera el DataKey para trabajar.
int consultaId = Convert.ToInt32(Request.QueryString["consultaID"]);
// Define data objects
SqlConnection conn;
SqlCommand comm;
SqlDataReader reader;
// Read the connection string from Web.config
string connectionString =
ConfigurationManager.ConnectionStrings[
"Pruebas"].ConnectionString;
// Initialize connection
conn = new SqlConnection(connectionString);
//Variable del select
string selectSQL = "SELECT SolucionConsultas.Fecha, aspnet_Users.UserName, SolucionConsultas.Solucion, SolucionConsultas.ConsultaID FROM SolucionConsultas INNER JOIN aspnet_Users ON SolucionConsultas.UserID = aspnet_Users.UserID WHERE SolucionConsultas.ConsultaID = @ConsultaID";
// Create command
comm = new SqlCommand(selectSQL, conn);
// Add the ConsultaID parameter
comm.Parameters.Add("ConsultaID", SqlDbType.Int);
comm.Parameters["ConsultaID"].Value = consultaId;
// Enclose database code in Try-Catch-Finally
try
{
// Open the connection
conn.Open();
// Execute the command
reader = comm.ExecuteReader();
// Fill the grid with data
solucionDetalle.DataSource = reader;
solucionDetalle.DataKeyNames = new string[] { "ConsultaID" };
solucionDetalle.DataBind();
// Close the reader
reader.Close();
}
finally
{
// Close the connection
conn.Close();
}
}

*********************************************

No se que puede estar pasando.

Muchas gracias por su ayuda.
  #2 (permalink)  
Antiguo 12/09/2008, 10:44
 
Fecha de Ingreso: octubre-2000
Mensajes: 1.692
Antigüedad: 23 años, 6 meses
Puntos: 19
Respuesta: Problema Update DetailsView

Hola como te va.

Siempre que no encuentres un control en un componente te conviene meter un punto de interrupcion en tu funcion y despues ir viendo por medio de inspector de codigo los objetos que tiene tu control, asi poder ver que va pasando. Otra cosa es controlar siempre el nombre con el que estas tratando encontrar tu control, fijaterte de que sea el correcto.

De todo modos me parece que el problema en tu caso esta en esta linea:

TextBox nuevaSolucionTextBox = (TextBox)solucionDetalle.FindControl("solucionText Box");

Fijate que me parece que "SolucionText Box" tenes un espacio entre la x y la B, verifica que este no sea tu problema y controla que este bien el nombre.
Saludos.
__________________
PD: Con amor, fe, amor a Dios y amistad podemos hacer un mundo mejor!!!!
  #3 (permalink)  
Antiguo 12/09/2008, 21:41
 
Fecha de Ingreso: julio-2008
Mensajes: 12
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Problema Update DetailsView

El nombre del control estaba bien en mi codigo. Debia aparecer el espacio al pasar el codigo al foro.

He puesto un checkpoint y he visto que estoy teniendo algun problema con el DataKey. Los valores de la variable TextBox "nuevaSolucionTextBox" aparecian a null como si no encontrara el control TextBox.

He cambiado el campo que utilizo de DataKey y ahora parece que encuentra el control, pues ya no me aparece a null.

El problema ahora es que "nuevaSolucionTextBox.Text" tiene como valor de la cadena el dato anterior a la edicion del DetailsView en lugar del valor que escribo en este control, cuando edito el DetailView.

Es como si el DetailsView siguiera en modo ReadOnly, de hecho es el valor que aparece en su propiedad CurrentMode cuando paro la ejecucion en el checkpoint. Tambien en esta parada he visto que no me aparece ningun valor en el DataKey aunque la variable "int solucionId = (int)solucionDetalle.DataKey.Value;" si parece haber cargado el valor correcto.

Parece un problema con el DataKey o con el paso al modo edicion del DetailView.

Alguna pista de por donde puedo tener el error.

Muchas gracias.
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 18:19.