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

Actuando en el ItemInserting

Estas en el tema de Actuando en el ItemInserting en el foro de .NET en Foros del Web. Hola a tod@s: ** Trabajando en C# ~ ASP.NET 2.0 ** Tengo en DetailView para realizar altas de registros en una tabla de la base ...
  #1 (permalink)  
Antiguo 18/08/2007, 05:07
Avatar de zacktagnan  
Fecha de Ingreso: abril-2005
Mensajes: 501
Antigüedad: 19 años
Puntos: 3
Actuando en el ItemInserting

Hola a tod@s:

** Trabajando en C# ~ ASP.NET 2.0 **

Tengo en DetailView para realizar altas de registros en una tabla de la base de datos. En uno de los campos de dicha tabla, se recogen los IDs de los perfiles permitidos asignados a cada registro.
Como un registro puede tener uno ó más perfiles asignados, en el campo de la tabla los almaceno de esta forma:

- si por ejemplo, tiene asignado el perfil de Administración(con el ID = 1), Gerencia(2), y Operaciones(4) ==> 1#2#4

Para construir esta cadena con los IDs separados con #, he puesto un CheckBoxList que lista los perfiles y un TextBox (que estará oculto) que recogerá dicha cadena y de dónde se tomará el valor a insertar en la tabla de la base de datos.
Al pulsar el botón de [Insertar], se recogeran los IDs de los elementos chequeados, y se formara la cadena de perfiles con el formato antes especificado, cadena que, como he dicho, pasará al TextBox (llamado mnu_perfiles_Ins) de los perfiles.

Todo esto de recoger los chequeados, construir la cadena con el formato de los IDs y las #, y finalmente pasar la cadena resultante al TextBox.Text lo realizo dentro del evento ItemInserting del DetailView, en la función recogiendo_Perfiles. Y va bien.
Lo sé porque a modo de prueba para ver que la cadena se construía correctamente y quedaba en el TextBox, cancelé el evento con [ e.Cancel = true ]

La cuestión es que si quito el cancel para que se realice el inserto, no sé por qué pero no llega a recogerse el valor del TextBox de perfiles y, por tanto, al ser un valor obligatorio el inserto da error y no se realiza.
Es como si no diera tiempo a recoger la cadena en el TextBox... No sé...


** Este es el código **

.aspx
Código:
                <asp:DetailsView ID="DetailsView_insMenu" runat="server" AutoGenerateRows="False"
                    DataSourceID="SqlDs_insMenu" DefaultMode="Insert" CssClass="ecograscomponentdata" OnItemInserted="DetailsView_insMenu_ItemInserted" OnModeChanging="DetailsView_insMenu_ModeChanging" OnItemInserting="recogiendo_Perfiles">
                    <Fields>
                        <asp:BoundField DataField="mnu_txt" HeaderText="Texto:" SortExpression="mnu_txt" />
                        <asp:BoundField DataField="mnu_title" HeaderText="Título:" SortExpression="mnu_title" />
                        <asp:TemplateField HeaderText="Cabecera:" SortExpression="mnu_cabecera">
                            <EditItemTemplate>
                                <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("mnu_cabecera") %>'></asp:TextBox>
                            </EditItemTemplate>
                            <InsertItemTemplate>
                                <asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="True" DataSourceID="SqlDS_Cabeceras"
                                    DataTextField="mnu_txt" DataValueField="mnu_padre_id" SelectedValue='<%# Bind("mnu_cabecera") %>'>
                                    <asp:ListItem Value="0">** Seleccionar una **</asp:ListItem>
                                </asp:DropDownList><asp:SqlDataSource ID="SqlDS_Cabeceras" runat="server" ConnectionString="<%$ ConnectionStrings:ecogras_conexion %>"
                                    SelectCommand="spSelec_MenusPadre" SelectCommandType="StoredProcedure"></asp:SqlDataSource>
                            </InsertItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Bind("mnu_cabecera") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Padre:" SortExpression="mnu_padre_id">
                            <EditItemTemplate>
                                <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("mnu_padre_id") %>'></asp:TextBox>
                            </EditItemTemplate>
                            <InsertItemTemplate>
                                &nbsp;<asp:DropDownList ID="DropDownList2" runat="server" AppendDataBoundItems="True"
                                    DataSourceID="SqlDS_Padres" DataTextField="mnu_txt" DataValueField="mnu_id" SelectedValue='<%# Bind("mnu_padre_id") %>'>
                                    <asp:ListItem Selected="True" Value="0">** Seleccionar uno **</asp:ListItem>
                                </asp:DropDownList><asp:SqlDataSource ID="SqlDS_Padres" runat="server" ConnectionString="<%$ ConnectionStrings:ecogras_conexion %>"
                                    SelectCommand="spSelec_AsignarPadre" SelectCommandType="StoredProcedure"></asp:SqlDataSource>
                            </InsertItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label2" runat="server" Text='<%# Bind("mnu_padre_id") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:BoundField DataField="mnu_posicion" HeaderText="Posición:" SortExpression="mnu_posicion" />
                        <asp:CheckBoxField DataField="mnu_submnus" HeaderText="Submenús:" SortExpression="mnu_submnus" />
                        <asp:BoundField DataField="mnu_url" HeaderText="URL:" SortExpression="mnu_url" />
                        <asp:TemplateField HeaderText="Perfiles:" SortExpression="mnu_perfiles">
                            <EditItemTemplate>
                                <asp:TextBox ID="TextBox3" runat="server" Text='<%# Bind("mnu_perfiles") %>'></asp:TextBox>
                            </EditItemTemplate>
                            <InsertItemTemplate>
                                <asp:TextBox ID="mnu_perfiles_Ins" runat="server" Text='<%# Bind("mnu_perfiles") %>' Visible="False"></asp:TextBox>
                                <asp:CheckBoxList ID="ChkBxList_Perfiles" runat="server" DataSourceID="SqlDs_perfiles"
                                    DataTextField="perfil_nom" DataValueField="perfil_id">
                                </asp:CheckBoxList><asp:SqlDataSource ID="SqlDs_perfiles" runat="server" ConnectionString="<%$ ConnectionStrings:ecogras_conexion %>"
                                    SelectCommand="spSelec_Perfil" SelectCommandType="StoredProcedure"></asp:SqlDataSource>
                            </InsertItemTemplate>
                            <ItemTemplate>
                                <asp:Label ID="Label3" runat="server" Text='<%# Bind("mnu_perfiles") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField >
                            <EditItemTemplate>
                                <asp:Button runat="server" CommandName="Insert" Text="Insertar" ID="btn_OKIns_Regis" />
                                <asp:Button runat="server" CommandName="Cancel" Text="Cancelar" ID="btn_CancelIns_Regis" />
                            </EditItemTemplate>
                        </asp:TemplateField>
                    </Fields>
                </asp:DetailsView>
                <asp:SqlDataSource ID="SqlDs_insMenu" runat="server" ConnectionString="<%$ ConnectionStrings:ecogras_conexion %>"
                    InsertCommand="spIns_Menu" InsertCommandType="StoredProcedure" SelectCommand="SELECT TOP 0 * FROM MENU">
                    <InsertParameters>
                        <asp:Parameter Name="mnu_txt" Type="String" />
                        <asp:Parameter Name="mnu_title" Type="String" />
                        <asp:Parameter Name="mnu_cabecera" Type="Int32" />
                        <asp:Parameter Name="mnu_padre_id" Type="Int32" />
                        <asp:Parameter Name="mnu_posicion" Type="Byte" />
                        <asp:Parameter Name="mnu_submnus" Type="Boolean" />
                        <asp:Parameter Name="mnu_url" Type="String" />
                        <asp:Parameter Name="mnu_perfiles" Type="String" />
                    </InsertParameters>
                </asp:SqlDataSource>
.aspx.cs
Código:
    protected void DetailsView_insMenu_ItemInserted(object sender, DetailsViewInsertedEventArgs e)
    {
        Response.Redirect("gestmenu.aspx");
    }

    protected void DetailsView_insMenu_ModeChanging(object sender, DetailsViewModeEventArgs e)
    {
        if (e.CancelingEdit == true)
        {
            Response.Redirect("gestmenu.aspx");
        }
    }
    protected void recogiendo_Perfiles(object sender, DetailsViewInsertEventArgs e)
    {
        e.Cancel = true;

        string perfiles_ok = "";
        CheckBoxList conjunto_Perfiles = DetailsView_insMenu.FindControl("ChkBxList_Perfiles") as CheckBoxList;
        TextBox _mnu_perfiles_Ins = DetailsView_insMenu.FindControl("mnu_perfiles_Ins") as TextBox;

        for (int x = 0; x < conjunto_Perfiles.Items.Count; x++)
        {
            if (conjunto_Perfiles.Items[x].Selected)
            {
                if (perfiles_ok == "")
                {
                    //conjunto_Perfiles.Items[x].Value
                    perfiles_ok += conjunto_Perfiles.Items[x].Value;
                }
                else
                {
                    perfiles_ok += "#" + conjunto_Perfiles.Items[x].Value;
                }
            }
        }

        _mnu_perfiles_Ins.Text = perfiles_ok;
    }
Bueno espero que alguien sepa porque no llega adecuadamente el valor al sitio deseado antes de que se efectúe el Insert. Yo he hecho bastantes pruebas y no consigo sacarlo. Seguiré intentándolo...

A ver si tengo más suerte con este tema. En los últimos que he planteado dentro del .NET, no he llegado a obtener respuesta alguna...

Bueno, gracias anticipadas a todos los que aporten algo...
__________________
Saludos,

zacktagnan.
=================================================
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 01:01.