none
Editar Registros de BD con ListView RRS feed

  • Pregunta

  • Buenas tardes a todos.

    Estoy programando en ASP.NET con c# un sitio que me permita editar una tabla en una BD de SQL Server.

    La tabla tiene formato 

    ID - PK NotNULL

    campo1 NotNULL

    campo2 null, etc.

    La idea es crear un formulario de edición general para todos los registros y que, el usuario, con dos DropDownList en cascada (el segundo depende de la selección del primero y ambos tienen la opción AutoPostBack activada) pueda seleccionar el registro.

    Hasta Ahora ya logré encadenar los DropDownList y generar correctamente los registros en la base de datos, el problema es que, independientemente de la selección del usuario, el guardado se hace en el 1° registro de la base de datos. Creé una tabla de auditoría que agrega un registro al hacer el update y veo que efectivamente el sitio trabaja.

    Siguiendo la lógica del ListView, aunque acomode los TextBox de otro modo o le ponga los DropDownList para seleccionar el campo1, sigo editando el mismo registro (el primero de la tabla), por lo cual, supuse que sacando los DropDownList del ListView y colocando los campos como TextBox invisibles, podría crear la forma de edición general.

    Sin embargo, no he encontrado la forma de rellenar en automático estos TextBox con la opción Seleccionada de los DropDownList

    <

    <body> <form id="form1"> <table runat="server"> <tr> <td> DDL1: <asp:dropdownlist ID="DDL1" runat="server" AutoPostBack="True" DataSourceID="DS1" DataTextField="campo2" DataValueField="ID" ClientIDMode="Static"></asp:dropdownlist> </td> <td> DDL2: <asp:dropdownlist ID="DDL2" runat="server" AutoPostBack="True" DataSourceID="DS2" DataTextField="campo4" DataValueField="ID" ClientIDMode="Static"></asp:dropdownlist> </td> </tr> </table> <asp:ListView ID="ListView1" runat="server" DataKeyNames="sequence" DataSourceID="Resultado" GroupItemCount="1"> <EditItemTemplate> <td runat="server" style=""> Campo1 <asp:TextBox ID="Campo1TB" runat="server" Text='<%# Bind("campo1") %>' ClientIDMode="Static"/> <br /> Campo2 <asp:TextBox ID="Campo2TB" runat="server" Text='<%# Bind("campo2") %>' ClientIDMode="Static"/> <br /> Campo3 <asp:TextBox ID="Campo3TB" runat="server" Text='<%# Bind("campo3") %>' ClientIDMode="Static"/> <br /> Campo4 <asp:TextBox ID="Campo4TB" runat="server" Text='<%# Bind("campo4") %>' ClientIDMode="Static"/>

    </td> </EditItemTemplate> <EmptyDataTemplate> <table runat="server" style=""> <tr> <td>No se han devuelto datos.</td> </tr> </table> </EmptyDataTemplate> <emptyitemtemplate> <td runat="server" /> </emptyitemtemplate> <grouptemplate> <tr id="itemPlaceholderContainer" runat="server"> <td id="itemPlaceholder" runat="server"></td> </tr> </grouptemplate> <ItemTemplate> <td runat="server" style=""> Folio: <asp:TextBox ID="campo1TB2" runat="server" Text='<%# Eval("campo1") %>' ClientIDMode="Static"/> <br /> Asignado: <asp:TextBox ID="Campo2TB2" runat="server" Text='<%# Eval("campo2") %>' ClientIDMode="Static"/> <br /> <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="Editar" /> <br /> </td> </ItemTemplate> <LayoutTemplate> <table runat="server"> <tr runat="server"> <td runat="server"> <table id="groupPlaceholderContainer" runat="server" border="0" style=""> <tr id="groupPlaceholder" runat="server"> </tr> </table> </td> </tr> <tr runat="server"> <td runat="server" style=""> <asp:DataPager ID="DataPager1" runat="server" PageSize="1" visible="false"> <Fields> <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" ShowNextPageButton="False" ShowPreviousPageButton="False" /> <asp:NumericPagerField /> <asp:NextPreviousPagerField ButtonType="Button" ShowLastPageButton="True" ShowNextPageButton="False" ShowPreviousPageButton="False" /> </Fields> </asp:DataPager> </td> </tr> </table> </LayoutTemplate> </asp:ListView> </form> </body>

    He intentado copiar la información del DropDownList al TextBox con código C#

    protected void DDL1_SelectedIndexChanged(object sender, EventArgs e)
        {
            listview1.Findcontrol("campo1").Text = ((DropDownList)sender).SelectedValue;
        }
        protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            if (Page.IsPostBack)
            {
                if (e.Item.ItemType == ListViewItemType.DataItem)
                {
                    DropDownList DDL1 = e.Item.FindControl("DDL1") as DropDownList;
                    DDLAsignado.SelectedIndexChanged += new EventHandler(DDL1_SelectedIndexChanged);
    
                }
            }
        }

    y con JavaScript

    <script type="text/javascript">
    // <!CDATA[
    function copiar() {
      document.getElementById(campo1TB).text = document.getElementById(DDL1).selectedValue
    }
    //]]
    </script>

    Sin embargo, no lo he conseguido, y no se si esto sea la solución (supongo que sí ya que le estamos indicando al sitio que tome el valor seleccionado para el campo 1).

    Espero puedan ayudarme, les agradezco enormemente su atención.

    Saludos 

    martes, 7 de abril de 2015 22:02

Respuestas

  • Hola darkjesmx

    Gracias por consultar en los foros. Voy a cerrar el thread, debido a falta de información. Recuerda que si aún no solucionas tu problema, siempre puedes desmarcarlo y proporcionarnos más detalles.

    Saludos,

    Karen.

    _________________


    Por favor, recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema.

    Es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    lunes, 27 de abril de 2015 16:32
    Moderador

Todas las respuestas

  • Hola, cuando realizas la seleccion del DropdownList le estas enviando ese valor como parametro a tu control datasource? seria bueno poder ver como estas realizando la sentencia Update con ese parametro con tu datasource.

    Saludos :)


    • Editado lavila85 jueves, 23 de abril de 2015 0:03 Mejora en la respuesta
    jueves, 23 de abril de 2015 0:00
  • Hola darkjesmx

    Gracias por consultar en los foros. Voy a cerrar el thread, debido a falta de información. Recuerda que si aún no solucionas tu problema, siempre puedes desmarcarlo y proporcionarnos más detalles.

    Saludos,

    Karen.

    _________________


    Por favor, recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema.

    Es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Microsoft ofrece este servicio de forma gratuita, con la finalidad de ayudar a los usuarios y la ampliación de la base de datos de conocimientos relacionados con los productos y tecnologías de Microsoft. Este contenido es proporcionado "tal cual" y no implica ninguna responsabilidad de parte de Microsoft.

    lunes, 27 de abril de 2015 16:32
    Moderador