viernes, 12 de enero de 2018

Doble-click en controles ListBox

Los controles ListBox no tiene un evento de servidor para el dobleclick
La solución que más consiste en capturar el doble click por JavaScript e invocar un sumit de un botón oculto.

No me gustaba mucho la idea.
Desde la base de

Hice el mío  propio,  
    public class MiListBox : ListBox, IPostBackEventHandler
    {
       
        #region IHttpHandler Members

        public bool IsReusable
        {
            
            get { return true; }
        }
       
        public void ProcessRequest(HttpContext context)
        {
            //Escriba aquí la implementación del controlador.
        }

        #endregion

        public event EventHandler DblClick;
        private const string _DOUBLE_CLICK = "dbl";
        protected virtual void OnDblClick(EventArgs e)
        {
            if (DblClick != null)
            {
                DblClick(this, e);
            }
        }
        protected override void OnInit(EventArgs e)
        {
            if (this.Page != null)
            {
                this.Page.RegisterRequiresControlState(this);
            }
            base.OnInit(e);
        }
        protected override void OnPreRender( EventArgs e)
        {
            string script = this.Page.ClientScript.GetPostBackEventReference(this, _DOUBLE_CLICK);
            this.Attributes.Add("ondblclick", script);
            base.OnPreRender(e);
        }
        public void RaisePostBackEvent(string eventArgument)
        {
            if (eventArgument == _DOUBLE_CLICK)
            {
                this.OnDblClick(EventArgs.Empty);
            }
        }
    }
Yo no necesitaba  datos, ni da por el estilo por eso  hereda de IPostBackEventHandler e implementar la función RaisePostBackEvent  

Si hubiera  necesitado datos tendrá  que haber heredado de  IPostBackDataHandler  e RaisePostBackData

viernes, 20 de octubre de 2017

Borrar registros duplicados en sqlserver

Según  microsoft


Otra solución

-- tabla temporal  
SELECT DISTINCT col1, col2, col3
 INTO #tablaTemporal
FROM   mitabla;

select * from  #tablaTemporal
-- Borrar todos los datos de la tabla original
DELETE FROM mitabla;

-- Volcar los datos no duplicados desde la tabla temporal a la original
INSERT INTO mitabla
SELECT * FROM #tablaTemporal;

drop table #tablaTemporal;

viernes, 18 de agosto de 2017

Multi-idioma

Tengo una web asp .net webForm  el  multi-idioma lo tenia resuelto con  resources.
Llega el cliente y exige que  una página web del sitio los textos estén en ficheros po 😥😥.

Que es un fichero po : portable object

Es un fichero donde están las etiquetas. Más información

http://www.xperimentos.com/2009/02/21/ficheros-de-traduccin-pot-po-y-mo/

Si se puede editar con el poedit y con un block de notas. Esto me parece super  interesante con respecto al resources. Pero claro estamos es el último sprint, ahora tengo que usar algo diferente 😥😥😥

Bueno todo tiene solución y está vez la solución está en 
https://github.com/turquoiseowl/i18n

A mi personalmente no me funciona las opciones de otras rutas u otro nombre del fichero, pero el resto me fue de lujo.

La próxima vez además de asegurarme si la aplicación  tiene que ser multi-idioma,  preguntaré donde tienen que ir los textos traducidos.

Tengo una “manía” y es que los formatos de fecha los almaceno en fichero de recursos,  para evitarme problema de separadores y diferente formatos de fechas.

Para que el idioma del PO  me funcionará en servidor
1.       Establecemos el idioma

Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(culture);
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(culture);
i18n.LanguageTag lt = i18n.LanguageTag.GetCachedInstance(culture);
HttpContext.Current.SetPrincipalAppLanguageForRequest(lt);

2.       Leer etiquetas del po en servidor
public string GetTraduccionPO(string name)
        {
            i18n.TranslateSvc_HttpContext auixc = new i18n.TranslateSvc_HttpContext(this.Context);
            string cad = auixc.ParseAndTranslate("[[[" + name + "]]]");
            return cad;
        }
     3. Para el caso de las fechas

lbFecha.Text = string.Format(CultureInfo.InvariantCulture, GetTraduccionPO("fecha"), dato.FechaInicio);

jueves, 1 de junio de 2017

Grid & Update panel y un error raro

Tengo un el tipo grid en un upate panel ,  cuando se pulsa el botón de consultar te lleva al detalle de la línea.

Unas veces me funciona bien y otras daba el error:

Uncaught Error: Sys.WebForms.PageRequestManagerServerErrorException: An unknown error occurred while processing the request on the server. The status code returned from the server was: 500

El problema estaba en número de datos, mi grid tenía 28.000 registros . 

La solución en mi caso:

<system.web>
<httpRuntime maxRequestLength="2097151" />
</system.web>

viernes, 26 de mayo de 2017

asp: MultiView problemas con el PostBack


Tenía un MultiView que se activaba con un menú. Me cree un control de usuario que tenía javascrpt que no funcionaba si no estaba situado en el primer view.

Mi código era
  <asp:UpdatePanel ID="UpdatePanel7" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
                <asp:Menu ID="Menu1" runat="server" OnMenuItemClick="Menu1_MenuItemClick" Orientation="Horizontal" >
<Items>
                        <asp:MenuItem Text="View1" Value="0"  ></asp:MenuItem>
                        <asp:MenuItem Text="View2" Value="1" ></asp:MenuItem>
                        <asp:MenuItem Text="View3"Value="2"></asp:MenuItem>
                        <asp:MenuItem Text="View4"Value="3"></asp:MenuItem>
                    </Items>
                </asp:Menu>
                <asp:MultiView ID="MultiView1" runat="server"   ActiveViewIndex="0">
                    <asp:View ID="View1"  runat="server">
                        Vista 1
                    </asp:View>
                    <asp:View ID="View2"  runat="server">
                        Vista 2
                    </asp:View>
                     <asp:View ID="View3" " runat="server">
                        Vista 3
       </asp:View>
                       <asp:View ID="View5"  runat="server">
                        Vista 3
</asp:View>
                </asp:MultiView>
            </fieldset>
        </ContentTemplate>
    </asp:UpdatePanel>

La solución fue añadir al update panel  
        <Triggers>
            <asp:PostBackTrigger  ControlID ="Menu1"  />
        </Triggers>


Y todo funcionando ok 

viernes, 19 de mayo de 2017

Asp:Menu parpadeos extraños

Tenía un menú en la master page

  <nav id="menu_cab" class="">
                                  <a href="#header" id="nav_abrir" title="Ver Menú">Ver Menú</a>
                                  <a href="#" id="nav_cerrar" title="Ocultar Menú">Ocultar Menú</a>
                    <asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false"
                        IncludeStyleBlock="false" Orientation="Horizontal"  
                        OnMenuItemClick ="NavigationMenu_MenuItemClick"   OnMenuItemDataBound="NavigationMenu_MenuItemDataBound"
                        DataSourceID="SiteMapDataSource1" MaximumDynamicDisplayLevels="2"   >
                    </asp:Menu>
                 </nav>


Tenía parpadeo extraños en el menú, cuando pulsaba alguna opción se veía durante unos segundos el tercer  sub-menu

A mí me función con poner

div.menu ul li ul { display: none; }