Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Hartigan

#101
Siguiendo con el tema tengo algunos problemillas.

por partes:

1º el tema de la pareja entre otros, en las especificaciones dice que debo usar: "X-SPOUSE:" pero a mi no me funciona no me lee nada. mi linea de código es:

Código (csharp) [Seleccionar]
sw.Write("X-SPOUSE:" + datos[31] + System.Environment.NewLine);

2º. El tema de fechas, como el aniversario o cumpleaños. Yo en la base de datos las fechas las guardé como string pero veo que no es la mejor manera puesto que luego para leerlas eso no me lo lee, ya que el formato para el vcard sería:

X-ANNIVERSARY    property    YYYY-MM-DD    arbitrary anniversary, in addition to BDAY = birthday

Eso es lo que viene en las especificaciones. Entonces cual es la mejor forma de guardar las fechas en la bdd???

Y bueno de momento eso es todo. A ver si me podeis ayudar.

Un abrazo ;)
#102
Exacto, el problema esque no puedo sincronizarlos, el hilo que va evaluando la base de datos y realizando la conexion con esta, con el hilo del progressbar...

Como podria hacerlo con un solo hilo??
No entiendo muy bien lo que dices...

Gracias por la respuesta
#103
Cita de: D4N93R en 29 Julio 2010, 18:47 PM
Con respecto al manejo de archivos, ten cuidado de no dejarlos abiertos, utilizando try catch y en el finally cerrarlo.

Un saludo!

gracias tio, es lo que estaba haciendo. ;)
#104
Síp muchas gracias, ya lo he conseguido pero ahora tengo un problema, y es el tema de los acentos. Que códificación debo usar a la hora de crear el fichero ??? creo que por defecto esta UTF-8...

saludos y gracias.
#105
HOla, esto no es para mi, sino para mi hermano: os pong lo que me ha puesto:


Estoy intentando hacer una aplicación de escritorio que al ejecutarla, lo primero que hace es establecer conexión con la fuente de datos, que no es mas que una comprobación de que la fuente de datos existe o esta accesible para que la aplicación funcione correctamente. La interfaz que hace dixa operación es la siguiente:



Lo que quiero es que el progressbar vaya sincronizado con las operaciones que se realizan, y que termine de cargarse justo cuando el acceso a la fuente de datos se a completado... El código es el siguiente:

Código (csharp) [Seleccionar]

public partial class Interfaz_Conectar : Form
    {
        /* Delegados */
        public delegate void Delegado_Conectar();
        private delegate void Avanzar_progreso();
        private delegate void Detener_progreso();
        private delegate void Cerrar();
       

        /* Eventos */
        public event Delegado_Conectar Conectar;
        public event Delegado_Conectar noConectar;


        /* Proceso de segundo plano */
        private BackgroundWorker bw = new BackgroundWorker();
        private BackgroundWorker avanzar = new BackgroundWorker();

        /* Factoria */
        private Factoria_DAO factoria;

        /* Para finaliar el progreso de la ProgressBar */
        private bool finalizar = false;
        private bool exito = false;


        public Interfaz_Conectar(Factoria_DAO _factoria)
        {
            InitializeComponent();
            factoria = _factoria;
        }

        /* Evento que tiene lugar cuando se muestra el formulario por primera vez */
        private void Interfaz_Conectar_Shown(object sender, EventArgs e)
        {
            bw.WorkerReportsProgress = true;
            bw.WorkerSupportsCancellation = true;
            bw.DoWork += new DoWorkEventHandler(bw_DoWork);
            bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
   

            avanzar.WorkerReportsProgress = true;
            avanzar.WorkerSupportsCancellation = true;
            avanzar.DoWork += new DoWorkEventHandler(avanzar_DoWork);
            //avanzar.RunWorkerCompleted += new RunWorkerCompletedEventHandler(avanzar_RunWorkerCompleted);

           

            /* Se incia la operacion en segundo plano */
            avanzar.RunWorkerAsync();

            /* Se inicia la operacion en segundo plano */
            bw.RunWorkerAsync();

           
        }

        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            Gestion_Conectividad gconectividad = new Gestion_Conectividad();
            if (gconectividad.Comprobar_conectividad(factoria))
            {
                exito = true;
                finalizar = true;
                if (Conectar != null)
                    Conectar();
            }
            else
            {
                exito = false;
                finalizar = true;
                if (noConectar != null)
                    noConectar();
            }
        }
       

        private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (this.InvokeRequired == true)
            {
                Cerrar cerrar = new Cerrar(this.Cerrar_form);
                this.Invoke(cerrar);
            }
            else
            {
                this.Cerrar_form();
            }
        }

        private void avanzar_DoWork(object sender, DoWorkEventArgs e)
        {
            if (this.progressBarConectar.InvokeRequired == true)
            {
                Avanzar_progreso aprogreso = new Avanzar_progreso(this.avanzar_Progreso);
                this.progressBarConectar.Invoke(aprogreso);
            }
            else
            {
                this.avanzar_Progreso();
            }

            if (this.InvokeRequired == true)
            {
                Detener_progreso dprogreso = new Detener_progreso(this.detener);
                this.Invoke(dprogreso);

            }
            else
            {
                this.detener();
            }
           
        }

        private void avanzar_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (this.progressBarConectar.InvokeRequired == true)
            {
                Detener_progreso dprogreso = new Detener_progreso(this.detener);
                this.progressBarConectar.Invoke(dprogreso);

            }
            else
            {
                this.detener();
            }
        }

        private void avanzar_Progreso()
        {
            for (int i = this.progressBarConectar.Minimum; i <= this.progressBarConectar.Maximum; i++)
            {
                if (finalizar == false)
                {
                    this.progressBarConectar.PerformStep();
                }
                else
                {
                    i = this.progressBarConectar.Maximum;
                }
                System.Threading.Thread.Sleep(50);
            }
           
        }

        private void detener()
        {
            if (exito)
                this.progressBarConectar.Value = this.progressBarConectar.Maximum;
                   
        }

        private void Cerrar_form()
        {
            this.Close();
        }
    }


En resumen lo que hago es crear dos subprcesos que se ejecutan en segundo plano, uno en el que se realizan las operaciones de acceso a la fuente de datos (factoria, es porque utlizo factoria abstracta junto con el patron DAO, factoria de DAO's) y el otro subproceso es el encargado de la barra de progreso. Lo unico que hago en la barra de progereso es un Sleep del hilo y que continue cargando, y asi sucesivamente, pero obiamnete eso no v a ir sincronizado con el otro subproceso, porque no hay nada que le vaya diciendo el progeso que lleva en las operaciones de acceso a la fuente de datos...
No se si me explico, de todas formas sino queda claro, explicare lo que haga falta y os asgradeczo en todo lo que me podais ayudar para conseguir hacerlo.

Gracias a todos.

pues eso, a ver si teneis alguna solución. Saludos ;)

#106
Hola, pues me gustaría poder exportar los datos de los contactos de mi agenda a fichero .vcf para que puedan se leidos por otras aplicaciones pero no se como hacerlo. He buscado info por google pero lo único que encuentro son cosas relacionadas con outlook pero nada echo en c#. Me podrias ayudar indicamndome los pasos que debo seguir??' que funciones uso para añadir la info???.

saludos y gracias compis
#107
Muchisimas gracias, me viene de perlas. xDD ;-)
#108
Vale ya lo tengo solucionado. Dejo el código por si le sirve a alguien:

Código (csharp) [Seleccionar]

....
DataTable datos = ... //Aquí obtengo los datos de la base de datos

if (datos != null)
                {
                    if (datos.Rows.Count == 0)
                    {
                        MessageBox.Show("No se ha encontrado ninguna coincidencia", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        dataGridView_Contactos.DataSource = null;
                        dataGridView_Contactos.Rows.Clear();

                        dataGridView_Contactos.DataSource = datos;

                        dataGridView_Contactos.Columns[0].HeaderText = "Nombre";
                        dataGridView_Contactos.Columns[1].HeaderText = "Primer apellido";
                        dataGridView_Contactos.Columns[2].HeaderText = "Segundo apellido";
                        dataGridView_Contactos.Columns[3].HeaderText = "Teléfono de contacto";
                        dataGridView_Contactos.Columns[4].HeaderText = "Correo electrónico";
                       
                    }
                    else
                    {

                        dataGridView_Contactos.DataSource = null;
                        dataGridView_Contactos.Columns.Clear();

                        dataGridView_Contactos.DataSource = datos;

                        dataGridView_Contactos.Columns[0].HeaderText = "Nombre";
                        dataGridView_Contactos.Columns[1].HeaderText = "Primer apellido";
                        dataGridView_Contactos.Columns[2].HeaderText = "Segundo apellido";
                        dataGridView_Contactos.Columns[3].HeaderText = "Teléfono de contacto";
                        dataGridView_Contactos.Columns[4].HeaderText = "Correo electrónico";
                       
                        dataGridView_Contactos.ClearSelection();
                    }
                }
...
...


Saludos y gracias por las respuestas.  ;-)
#109
Lool, da un error y dice que "No se puede borrar esta lista"... ???
#110
Hola pues esa es la duda. Tengo un dataGridview el cual ha cargado una serie de filas de la bdd. Como puedo hacer para borrar todas esas filas??? OJO!, no me vale .Columns.Clear().. Sólo quiero borrar las filas, he visto como borrar una fila con la siguiete función:

Código (csharp) [Seleccionar]

dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index);


Pero quiero borrar todas de una vez, y no encuentro como hacerlo...

Saludos y gracias de antemano.