martes, 27 de diciembre de 2011

ASPxGridView y FocusedRowChanged


Hola, en primer lugar felicitaros la nvidad a todo el mundo y que seais muy muy felices.
Bueno aquí os dejo un código del que estoy bastante orgulloso ya que he estado dos días intentando hacerlo de una forma eficiente y al final lo he conseguido:
Se trata de como actualizar un aspxgridview al seleccionar la fila de otro aspxgridview.
En mi ejemplo tenía en uno personal y en otro permisos de ese personal, al seleccionar el personal quería que me aparecieran en el otro aspxgridview los permisos que tienen asignados.
Este es el código de los elementos:

        <dx:ASPxGridView ID="ASPxGridView1" runat="server" ClientIDMode="AutoID" OnLoad="cargaPermisosPersonal"   >
             <ClientSideEvents FocusedRowChanged="function(s, e) { ASPxGridView2.PerformCallback();  }" />
        </dx:ASPxGridView>


           <dx:ASPxGridView ID="ASPxGridView2" runat="server" OnAfterPerformCallback="cargaPermisosPersonal">
               <SettingsText EmptyDataRow="No hay ningún permiso asignado" />
           </dx:ASPxGridView>


La función cargaPermisosPersonal no la pongo porque es bastante larga, pero lo que hace es obtener el identificador del personal y buscar en la base de datos sus permisos, además de otras funciones que no tienen nada que ver con esta entrada.

Para explicar un poco lo que hace, con OnLoad cargamos la primera vez los permisos del primer personal, que es el que se selecciona la primera vez, y luego con clientsideevents focusedrowchanged lo que hacemos es actualizar el  aspxgridview2, que como podeis ver con onafterperformcallback llamamos a la función para cargar los permisos del nuevo personal seleccionado.

Muchas gracias y espero que haya sido de ayuda.

viernes, 23 de diciembre de 2011

location.reload(true)

Si en algún botón de los elementos de visual studio queréis recargar la página con esta función lo podéis hacer, aquí vemoos un ejemplo:
<dx:ASPxGridView ID="ASPxGridView1" runat="server" ClientIDMode="AutoID" OnFocusedRowChanged="cargaPermisosPersonal"  >
             <ClientSideEvents RowClick="function(s, e) { ASPxGridView2.PerformCallback();location.reload(false);  }" />
        </dx:ASPxGridView>

Gracias y espero que sea de ayuda.

miércoles, 21 de diciembre de 2011

AutoPostBack

A menudo se quiere programar un botón o un checkbox para que cuando se modifique aparezcan nuevos elementos en una ventana de un programa. Con Visual Studio 2010, incluso teniendo bien programada la función no funciona. Probad a cambiar el valor del AutoPostBack a true y guardar la página. Próximamente publicaré un artículo completo sobre este atributo.

Session caducada

He solucionado un error que tenía referente a las sesiones en visual studio.

Las sessiones en visual studio tienen un tiempo de expiración, que se configura con la variable timeout. Pues al pasar este tiempo sin realizar ninguna acción aparece un error de "Referencia a objeto no establecida como instancia de un objeto." en la línea usuarioConexion = Session["stringUsuario"].ToString();

La forma que yo he tenido de solucionarlo en poner en todos los Page_Load este código:
 if (Session["stringUsuario"] == null)
                    Response.Redirect("~/portadaPrincipal.aspx");

Además en mi aplicación, el portadaPrincipal redirige a un index que tiene dos frames, para poder eliminar estos frames y dejar la pantalla limpia utilizo este javascript en el portadaPrincipal

<script type="text/javascript">
    function quitarFrame() {
        if (self.parent.frames.length != 0)
            self.parent.location = document.location.href;
    }
    quitarFrame()
</script>

Espero os sirva de ayuda.

martes, 20 de diciembre de 2011

Ventana de aviso en ASP.NET

En relación a la entrada anterior, si solamente quieres mostrar una ventana con un mensaje de error, puedes hacerlo así:

this.Page.Response.Write("<script language='JavaScript'>window.alert('<<Mensaje de error>>');</script>");

Hasta la próxima.

viernes, 16 de diciembre de 2011

MessageBox.Show en ASP.NET

 Tengo el siguiente error:


Exception Details: System.InvalidOperationException: No se puede mostrar un cuadro de diálogo o formulario modal cuando la aplicación no está en modo UserInteractive. Especifique el estilo ServiceNotification o DefaultDesktopOnly para mostrar una notificación de una aplicación de servicio.

En la siguiente línea de código:

   DialogResult result = MessageBox.Show("¿Desea borrar el perfil 
seleccionado?", 
"Confirmación", MessageBoxButtons.YesNo);
 
Según he leido viene dado porque los messagebox no se pueden poner en una 
aplicación web por el tema del cliente y el servidor.
 
Después de darle muchas vueltas he llegado a una solución bastante 
sencilla.
 
Lo he encontrado en esta dirección.
 
Al parecer existe para los botones una opción que es la de OnClientClick
que ejecuta
si está en el servidor.
 
<asp:Button ID="Button1" runat="server" 
OnClientClick="return confirm('Are you sure you want to delete?');"
                onclick="Button1_Click" Text="Delete" /> 

Con este elemento podemos decir que primero muestre una ventana de
 confirmación y si
es true, entra en Button1_Click, y si es false no hace nada

Espero que a alguie le sea de ayuda ya que me ha costado bastante
 encontrar esta
solución.
 
 
También lo he encontrado para este tipo de botón:
 
<dx:ASPxButton ID="ASPxButtonBorrar" runat="server" style="margin-left:0px" 
onclick="ASPxButtonBorrar_Click" Visible="true"  >
 
<Image Url="~/iconos/borrar.png" Height="30px" Width="70px">
</Image>
<Border BorderColor="White" BorderStyle="Outset" BorderWidth="5px" />
<ClientSideEvents Click="function(s,e){e.processOnServer = confirm('¿Está
seguro de borrar el registro?');}" />
</dx:ASPxButton> 

Programas para SCORM

Voy a publicar dos programas para poder crear cursos tipo SCORM:

eXe: http://exelearning.org

CourseLab:  http://www.courselab.com/

Y aquí tenéis uno para modificarlos una vez que están hechos, podéis abrirlos y ver el contenido.

Reload Scorm: http://www.reload.ac.uk/scormplayer.html


jueves, 15 de diciembre de 2011

Texto en mayúsculas de un programa

Estoy programando una aplicación en Visual Studio y quiero que en todos los input se vea el texto escrito en mayúsculas y luego al guardarlo en la base de datos también se guarde en mayúsculas.

Para verlo: input {text-transform :uppercase;} para ponerlo en la cabecera del .html, style="text-transform :uppercase" para ponerlo en el tag del input( por ejemplo textbox). Por si alguno en especial como por ejemplo el e-mail no quereis que esté en mayúsculas style="text-transform :none".

Para que se guarde en mayúsculas en la base de datos: TextBox.Text = TextBox.Text.ToUpper();
Así tenemos todo nuestro texto del programa en mayúsculas.

Gracias y hasta otra.