Truco del mes
Cuandono estamos utilizando una conexión con el servidor con los recursosde ASP y MS-SQL y necesitamos crear una lista de datoscon un control ASP:ListViewmuchas veces nos encontramos con que no podemos acceder directamentea un TEXBOX con el que queremos editar el contenido de lafila. Pues aquí os traigo la solución al problema.
Dostrucos por el precio de uno
Parapoder hacer este trabajo, necesitamos poder acceder a los controlesde la pagina, y para ello tenemos que buscar el control que queremosdentro de todos los controles de la pagina. Con este otro “truco”podemos hacer este trabajo fácilmente.
public Control FindControlRecursive(this Control ctrl, string controlID)
{
if (string.Compare(ctrl.ID, controlID, true) == 0)
{
// We found the control!
return ctrl;
}
else
{
// Recurse through ctrl's Controls collections
foreach (Control child in ctrl.Controls)
{
Control lookFor = FindControlRecursive(child, controlID);
if (lookFor != null
) return lookFor;
// We found the control
}
// If we reach here, control was not found
return null;
}
}
Manos a la obra
Primero definimos el ASP:ListView con los elementos quedeseamos. En mi ejemplo tenemos una tabla para ordenar los capítulosde un libro. Los campos son id, titulo yorden. Presentaremos una listaen el que el los dos primeros campos son ASP:Labely el ultimo es un ASP:TextBoxpara poder escribir el orden deseado. Por lo que nuestra listaquedaríaalgo así.
< asp:ListView ID="lstOrdenar" runat="server">
< ItemTemplate>
< div class="col-md-12"> < asp:Label ID="lblID" Text='<%# Eval("Id").ToString() %>' CssClass="col-lg-2 col-md-2 col-sm-2 col-xs-2" runat="server" />
< asp:Label ID="lblTitulo" Text='<%# Eval("titulo").ToString() %>' CssClass="col-lg-8 col-md-8 col-sm-8 col-xs-8" runat="server" />
ToolTip='<%# trans.get("Nuevo orden") %>' CssClass="col-lg-2 col-md-2 col-sm-2 col-xs-2">< /asp:TextBox>
Luego, necesitamos un botónpara aceptar los cambios en la lista.
< asp:Button ID="btnOrdenar" OnClick="btnOrdenar_Click" runat="server"
data-placement="top" data-toggle="tooltip" CssClass="btn btn-primary btn-lg" />
Finalmente, lo importante, en elevento btnOrdener_OnCLickes donde realizaremos la búsquedade cada control para poder ir generando la secuencia SQL deactualización de labase de datos.
protected void btnOrdenar_Click(object sender, EventArgs e)
{
ListView lista = (ListView)PageExtension.FindControlRecursive(this, "lstOrdenar"); //buscar el ASP:ListView
string sql = string.Empty;
foreach (ListViewItem item in lista.Items)
{
Label _idBlog = (Label)PageExtension.FindControlRecursive(item, "lblIdBlog"); //buscar el ASP:Label que contiene el ID
TextBox _Orden = (TextBox)PageExtension.FindControlRecursive(item, "txtOrden"); //buscar el ASP:TextBox que contiene el nuevo valor
sql += "update blogorden set orden = " + _Orden.Text + " where idblog = " + _idBlog.Text + "; "; //ir generando la secuencia SQL
}
cnn.EjecutarSQL(sql); //función que hace la actualización en la base de datos
}
Eso es todo amigos!!!
No hay mas, como veis es muchomas fácil de lo que te imaginabas, pero seguro que, como a mi muchasveces, te has vuelto loco, que si JAVASCRIPT, que si buscando enInternet y encontrando soluciones súper complejas… la verdad queno te voy a engañar, creo que yo he tardado mas de 3 años en llegara esto, y era tan sencillo como te lo he mostrado.
HappyCodding
#trucos #ASP #CSHARP