PREGUNTAS CONTESTADAS - C sharp

 Hay un total de 95 Preguntas.<<  >> 

    Pregunta:  54032 - AYUDA CON LISTVIEW DE C#
Autor:  pepe rodriguez
como se puede representar una tabla de base de datos en un listview me entere que es dinamico. que se puede representar en el como un datagrid realmente necesito esta informacion.
bueno me despido de antemano muchas gracias
  Respuesta:  Argel
Facil, obtienes los datos con ado.net en un dataset o datatable y la enlazas a un datagridview, a traves de las propiedades datasource y datamember que posee. si quisieras hacer lo mismo para un listview tendrias que configurar la cantidad de subitems y desde mi punto de vista es mas facil y rapido a traves de un datagridview

    Pregunta:  54053 - CREAR BASE DE DATOS MDB CON C# EN TIEMPO DE EJECUCIÓN
Autor:  Biel Piero Alvarado
Buenos Dias compañeros.

me he embarcado en un proyecto gigantesco de programación y me he conseguido en un aprieto, porque llego a una parte en la que necesito crear un base de datos de ms-access (mdb) en tiempo de ejecución.

se como crear las tablas, pero lo principal, que es crear la base de datos, no he conseguido como hacerlo.

por favor si alguien me puede ayudar el como hacerlo, mucho se lo agradeceré..

Agradecido de antemano
  Respuesta:  Julio Rodrigo Ponce Hinestroza
OK.
Gustaso, no se cual es el problema que tengas por que queres crear base de datos en tiempo de ejecucion?

son bases de datos con tablas temporarales.

Si es asi lo que te recomiendo hacer es un usar un datatable.

enviame mas informacion de lo que estas haciendo y con gusto puedo ayudarte.

Atentamente,
Julio Ponce
GUATEMALA
  Respuesta:  Rommel Meza
Que tal Biel tu problema me sucedio algun dia y si es posible crear una base de datos en tiempo de ejecucion pero te doy un tip mucho mas sencillo OK.

Primero crea una base de datos en Access Vacia (Aqui esta el truco) la adjuntas a tu proyecto ya sea como archivo adicional o dentro de un archivo de recursos.

Cada vez que quieras crear una base de datos nueva en tiempo de ejecucion cargas el archivo de la base de datos vacia y realizas una copia de este. (Jajjaa Magia ya tienes un archivo de base de datos mdb totalmente vacio para ejecutar tu script para la creacion de las tablas)

Muy sencillo no Suerte :)

    Pregunta:  54087 - CONFIGURAR PUERTO SERIE EN C# PARA MODEN
Autor:  rodrigo rodriguez
Hola
Estoy relaizando mi tesis en ingenieria electronica, y conozco muy poco de C#....Necesito comunicar una aplicacion interfaz de usuario en C# con un MODEM de comunicaciones industriales HART. Este modem exige que los terminales del puerto serial funcionen asi:

TRASMITIENDO DATOS:
RTS=CTS=TRUE; DSR= DTR= TRUE

RECIBIENDO DATOS:
RTS=CTS=FALSE ; DSR=DTR= TRUE

Por favor si alguien tiene informacion o sabe donde puedo adquirirla,le agradecere infinitamente, pues como ya mencione no he podido comunicarme con el moden y soy principiante en esto de la programacion, y lo peor, ya estoyquedandome colgado en el cronograma de la tesis.
Gracias
RODRIGO
  Respuesta:  Rommel Meza
Que tal Rodrigo lo que necesitas es bastante sencillo ya que .Net 2.0 nos proporciona una clase para este tipo de control.

Primero necesitamos tener un compilador de .Net 2.0 ya sea Mono, C# Developer o Visual Studio 2005 ok.

Despues es muy sencillo el uso del objeto System.IO.Ports.SerialPort que esta diseñado para hacer este tipo de trabajo, segun lo que escribes esto quedaria algo asi:

//Transmision de datos
System.IO.Ports.SerialPort serialPort = new System.IO.Ports.SerialPort();
serialPort.PortName = "";
serialPort.RtsEnable = true; //Cambias para reception
serialPort.CtsHolding = true; //Cambias para recepcion
serialPort.DtrEnable = true;
serialPort.DsrHolding = true;

Como veo que cuando trasmites y cuando recibes cambias lo primero me imagino es enviar informacion al modem y cambias de estado para reception.

Para recibir datos es necesario asignar un delegado al evento DataReceived y podria quedar algo asi:

//Manejador del puerto
private System.IO.Ports.SerialPort serialPort;
//Delegado que nos ayudara a realizar el cambio de configuracion
private System.IO.Ports.SerialDataReceivedEventHandler manejador;

//Configuramos el puerto inicial
private void configuraPuert()
{
serialPort.PortName = "COM1";
this.manejador = new System.IO.Ports.SerialDataReceivedEventHandler(serialPort_DataReceived);
}

//Envia datos
private void enviaDatos(String _datos)
{
//Configura para envio
this.serialPort.RtsEnable = true;
this.serialPort.CtsHolding = true;
this.serialPort.DtrEnable = true;
this.serialPort.DsrHolding = true;
this.serialPort.Write(_datos); //Escribe datos

this.configuraRecepcion(); //Configuramos para recepcion
//Activamos el evento para recibir datos
this.serialPort.DataReceived += this.manejador;
}

//Configuramos modem para recepcion
private void configuraRecepcion()
{
this.serialPort.RtsEnable = false;
this.serialPort.CtsHolding = false;
}

//Evento que se ejecutara cuando se reciben los datos
void serialPort_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
String result = this.serialPort.ReadExisting();
//Desactivamos el evento
this.serialPort.DataReceived -= this.manejador;
}

Espero te sirva de algo yo lo utilizo en algo parecido y me ha dado resultados si no mandame un Mail

Suerte :)

    Pregunta:  54159 - COMO IMPRIMIR EN C# EN IMPRESORA DE ETIQUETAS
Autor:  Sergio Rodrigo Bravo Saez
Estimados tengo un problema de ya 5 días, necesito mandar a imprimir una informacion por impresora Zebra"etiquetadora" y solo me imprime como una cadena de caracteres y no reconoce el formato, este problema se me escapo de las manos necesito saber si alguien ya a solucionado este inconveniente.
Ayudenme por favor
  Respuesta:  Jorge Briceño
yo tube el mismo problema para descubrir pero al fin lo solucioné, y en realidad es muy simple.
Mira para imprimir en impresoras Zebra de etiquetas, lo q tienes que hacer como primer paso es dependiendo del modelo de la impresora es revisar q codigo de lenguaje utiliza para recibir la información es decir si utiliza cpcl o zpl, etc.. ,
luego definir por medio de que puerto vas a imprimir es decir serial o lpt o tcp/ip, etc,,,
por ejemplo si es por serial

abir el puerto open..(,,,,,)
puertoserial.writeline("N")
puertoserial.writeline("A0.......") etc..
puertoserial.close
lo q envias a la impresora depende como te dije del tipo de impresora si es impresora mobil o si es desktop, segun eso revisar el lenguaje soportado y según eso envias los string, (eso te indica el manual)

si no tienes claro me escribes aqui o a mi mail.

Saludos
  Respuesta:  Israel Alvarez
Hola sergio no se si ya pudiste resolver el problema con la impresion, mira yo tengo un caso similar y lo que hice fue imprimir en fichero la etiqueta como .txt para etso necesitas usar las fuentes de la imrpesora pej. ZEBRA 0 y no las True Fonts, despues te va a generar el archivo txt con el lenguaje de la impresor algo como : ^XA~TA000~JSN^LT0^....etc.
para que la impresora lo imprima necesita generala como Text/only. y listo. espero te ayude esta informacion y si es que ya lo resolviste, esta bien. saludos
  Respuesta:  Rommel Meza
Saludos,

Que tal Sergio, yo nunca he impreso en una etiquetadota pero si en una impresora de credenciales y efectivamente al tratar de enviarlo desde C# nos generaba muchos inconvenientes y como no teníamos mucho tiempo lo que hicimos fue lo siguiente.

Instalamos la impresora y esta nos da las especificaciones de la impresión.

Diseñamos la impresión en forma de reporte utilizando Cristal Report ya que hay nos da una forma grafica de generar la impresión con las características del tamaño del papel y ese tipo de cosas.

Generamos una pequeña dll que mandaba llamar el Reporte de Cristal Report para la impresión de la credencial.

Espero te sirva de ayuda este proceso es bastante sencillo créeme no ahorramos por lo menos 2 o 3 días de investigación y desarrollo.

Suerte.

CX-Rom http://cx-rom.blogspot.com

    Pregunta:  54354 - CONTROLAR APLICACION OUTLOOK
Autor:  Lithium Flower
Hola, me gustaría saber si se puede hacer lo siguiente, ya que he probado mil cosas y siempre hay algún detallito que me falla, necesito orientación hacia la luz por favor!!!

MEdiante una función, crear un mensaje de correo electrónico de Outlook Express, pero que no se envíe automáticamente, sino con la opción .Display(true), en este caso nos interesa que se abra la ventana para meter texto de última hora, o agregar alguna dirección demás, o algún retoque de última hora. Necesito que se vea el mensaje y que el usuario lo pueda enviar como siempre, dándole él mismo al botón "ENVIAR".

El problema es cómo controlar desde la función si el mensaje se ha llegado a enviar, o si se ha cerrado la ventana del outlook sin llegar a enviar, o si se ha cancelado... vamos, necesito saber si se ha llegado a enviar o no.

He probado con la opción .Sent pero lo debo de estar haciendo mal porque me dice que el elemento de movió o eliminó. Como si no encontrase el email actual.

Y luego otro problema es que al enviar no me cierra el formulario de outlook sino que lo tengo que cerrar yo a mano y eso sí me gustaría que se hiciese automático. Pensé que con el .CLose() lo haría pero que va. Lo sigue dejando abierto.

No he encontrado nada en el web relativo a esto, vamos, a controlar lo que devuelva la aplicacion de Outlook, si es que se puede, por eso os escribo esta pregunta. Un saludo y gracias.
  Respuesta:  Lithium Flower
Hola, bueno he conseguido hacerlo de la siguiente manera:

En lugar de Outlook he utilizado el sistema de protocolo SMTP y un formulario con una apariencia similar a los del outlook, el único inconveniente que veo es el tema de la lista de direcciones que habría que descargar la libreta de direcciones del outlook.

Envío el código.

[CODIGO]

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Collections;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.Odbc;
using System.IO;
using System.Text.RegularExpressions;
//using System.Web.Mail; //esta no vale porque es un sistema obsoleto
using System.Net.Mail;//para generar los emails con protocolo SMTP
using System.Net.Sockets;//para las conexiones con el servidor
using System.Runtime.InteropServices;//para los objetos COM (Outlook)
using System.Runtime.InteropServices.ComTypes;// controlar excepciones de los objetos COM

/// <summary>
/// Envío de Emails a través del sistema SMTPCLient.
/// </summary>
/// <param name="eSubject">Asunto del mensaje (Subject)</param>
/// <param name="eDe">Remitente/s del mensaje (From)</param>
/// <param name="eDestinatario">Destinatario/s del mensaje (To)</param>
/// <param name="eDestOcultos">Destinatario/s ocultos del mensaje (CCO)</param>
/// <param name="eTextoEmail">Texto del email (Body)</param>
/// <param name="eAdjuntos">Ficheros Adjuntos del mensaje (Attachments)</param>
public void crearEMAILsmtp(string eSubject, string eDe, string eDestinatario,
string eDestOcultos, string eTextoEmail, string eAdjuntos)
{
// System.Web.Mail.SmtpMail.SmtpServer está obsoleta
// System.Net.Mail.SmtpClient es la clase recomendada
SmtpClient smtpClient = new SmtpClient();
MailMessage message = new MailMessage();

try
{
try
{
Attachment adjunto = new Attachment(eAdjuntos);
message.Attachments.Add(adjunto);
MailAddress fromAddress = new MailAddress(tbFrom.Text, System.Reflection.Missing.Value.toString());

//especificar el servidor
smtpClient.Host = "nombre del host";

//especificar el puerto
smtpClient.Port = 25;

//remitente del email (valor parametrizado en la Base de Datos)
message.From = fromAddress;

// To: colección de direcciones de mails, o un string formado por la unión de todas con ;

string[] dests = eDestinatario.Split(';');
if (dests.Rank > 0)
{
foreach (string email in dests)
{
message.To.Add(new MailAddress(email, System.Reflection.Missing.Value.ToString()));
}
}

message.Subject = eSubject;
if (!eDestOcultos.Equals(""))
{
foreach (string email in eDestOcultos.Split(new string[] { ";" }, StringSplitOptions.None))
{
message.Bcc.Add(new MailAddress(email, System.Reflection.Missing.Value.ToString()));
}
}

//FOrmato texto, no HTML
message.IsBodyHtml = false;

// Texto del mensaje
message.Body = eTextoEmail;

// Envía el email
smtpClient.Send(message);

MessageBox.Show("Email enviado con éxito.", "ENVIO DE EMAILS:",
MessageBoxButtons.OK, MessageBoxIcon.Information);
estadoEmail = 1;
}
catch(SmtpFailedRecipientsException exAll)
{
//no se ha podido enviar a todos los destinatarios
MessageBox.Show("No se ha podido enviar a todos los destinatarios: " +
exAll.Message.ToString(), "ENVIO DE EMAILS:", MessageBoxButtons.OK, MessageBoxIcon.Error);
estadoEmail = 0;
}
}
catch (SmtpException ex)
{
estadoEmail = 0;
//no se ha podido enviar el email correctamente
//MessageBox.Show("información del Envío: " + ex.StatusCode.ToString(), "ENVIO DE EMAILS:",
// MessageBoxButtons.OK, MessageBoxIcon.Information );

MessageBox.Show("El envío ha fallado. " + ex.Message.ToString(), "ENVIO DE EMAILS:",
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

En donde EstadoEmail controla si el email se ha llegado a enviar o por algún motivo el email no se ha llegado a enviar. Espero que sea útil para los demás.

    Pregunta:  54991 - LLENAR UN TREEVIEW CON UN DATATABLE C#
Autor:  Marianela Cruz M.
Necesito cargar el árbol desde una consulta que me retorna un datatable y no tengo la más minima idea.
Estoy trabajando en C# .net 2005
  Respuesta:  Jorge SAER
Marianela:
Supongamos que cada fila de tu DataTable (t) posee dos columnas, digamos id,nombre, supongamos que tu TreeView (_tree), entonces, la rutina es algo así:

foreach(DataRow row in t.Rows)
{
TreeNode node = new TreeNode();
node.Text = row["nombre"].ToString();
node.Tag = (int)row["id"];
_tree.Nodes.Add(node);
}

Es muy básico, pero espera haberte ayudado

    Pregunta:  55159 - COMO EVITAR QUE EJECUTEN EL SISTEMA SI ESTE YA ESTA EJECUTAD
Autor:  Anly Calle Cruz
Holas, necesito ayuda por fa gracias.
Como evito que no vuelvan a ejecutar o abrir dos veces el sistema Desarrollado.
  Respuesta:  nayumi orama
Supongo que te referirás a que una aplicación sólo se ejecute una vez.

La mejor forma de hacerlo es utilizando un mutex con nombre. Los mutex son objetos globales del sistema operativo, que además pueden ser compartidos entre aplicaciones.

Pero vamos al código.

En el formulario principal, supongamos Form1, de tu aplicación pones el siguiente código.

static Mutex mutex;
static string AppGuid ="26272A87-988F-428c-90DB-0CFA372A2E99"; // GUID generado con la herramienta de guids

public static bool InstanceExists
{ // En el get de la propiedad se crea un mutex y nos informa en
// si el mutex ya existia o no. Creamos el mutex con nombre para
// poder localizarlo posteriormente. Tenemos que asegurarnos que
// el nombre del mutex va a ser único, por eso se usa un GUID.
get
{
bool notExists;
mutex = new Mutex(false, "Local\\" + AppGuid, out notExists);
return !notExists;
}
}

En el main de tu aplicación pones el siguiente código

if (!Form1.InstanceExists )
Application.Run(new Form1());

De esta forma, el main sólo ejecutará el formulario si el mutex no existe.

    Pregunta:  55452 - ENVIAR UN CORREO USANDO SMTP EN PROYECTO CONSOLAC#.NET 2003
Autor:  Miguel Rabelo
Hola. Estoy realizando un sistema de alarmas y registro en línea. Este sistema debe ser capaz de notificar en tiempo real la existencia de una falla en dispositivos monitoreados. El problema es que no se como envíar un mensaje de correo con el protocolo smtp en c#. net 2003. he probado varios códigos que he bajado de la web pero no me han servido. Quizas es necesario alguna configuración adicional en mi pc . que hasta ahora desconozco. Por otra parte, me gustaría saber como envíar el mensaje cuyo contenido o cuerpo ( body) proviene de variables declaradas en mi aplicación de consola, es decir , tengo entendido que solo se puede enviar texto, sin embargo,el sistema debe enviar el contenido de varibles que poseen las especificaciones de las fallas dependiendo del dispositivo que falló. ( nombre, ip..). Hay alguna manera de convertir el contenido de la variable en texto para enviarlo? otra opción que he pensado es en registrar el contenido de las variables en un archivo de texto y tomar los datos directamente desde el archivo sin pasarlos a una variable antes de enviar el mensaje de alarma pero hasta ahora no funciona.

Si alguien puede ayudarme le agradezco de antemano.} salu2.
  Respuesta:  Rommel Meza
Saludos Miguel

Primero que nada te recomendaria que utilizaras VS 2005 con Freamwork 2.0 o superiror ay que contiene un Namespace llamda System.Web.Mail que nos facilita demasiado esto pero en fin si eres un retador del peligro aqui te pongo un gestor de SMTP que puedes utilizar en tu proyecto de Consola de 2003 solo ahy que mnodifiacrlo y crearlo como funcion:

http://www.codeproject.com/cs/internet/sendmailcsharp.asp

En caso de que requieras una autenticacion sencilla puedes utilizar la calse NetworkCredential y esperemos que no use un certificado SSL ya que tendras que cifrar el contenido de la conexion con la clase X509Certificate.

Suerte

    Pregunta:  55469 - MODICAR UN ARCHIVO TXT CON C#.NET 2003
Autor:  Miguel Rabelo
Hola. Me gustaría saber como modificar un archivo de texto ya creado y editado desde un proyecto de consola. El hecho es que tengo que editar los parametros del archivo(txt) desde una aplicación de window, es decir, la regla es que no debo acceder al archivo y hacer los cambios sino hacerlo desde una aplicación en C Sharp. net 2003. Parece facil, pero hasta ahora no se como editarlo sin modificar el formato ya establecido: Aqui anexo un ejemplo:
[Prog-Ver]
progver=1.0
[Start-Parm]
piserver=sup-11
scan_per=10min
scan_user=pidemo
user_pass=
[Interface_Location]
1=01awd1
2=01awd2
3=02awd1
4=03awd2
5=03awd1

Solo tengo que cambiar lo que esta a la derecha de la igualdad(parametros de entrada de aplicación) sin afectar lo que esta a la izquierda pero debo hacerlo preguntando al usuario el parámetro que desea modificar(piserver, scan_user, etc)

Si alguien puede ayudarme se lo agradezco muchísimo. Salu2
  Respuesta:  Fernando Tejedor
Usa las funciones Floor y Ceiling:
Ejemplo:
decimal num1 = 14.70M;
decimal num2 = 6.61M;

MessageBox.Show(string.Format("{0}, {1}",
Math.Floor(num1), Math.Ceiling(num2)));
  Respuesta:  Juan Aramis Ramirez
Utiliza StreamReader y StreamWriter para modificar el fichero. Ahora, para que te sea mas facil identificar a la derecha del (=) puedes utilizar una expresion regular que tenga bien definido los grupos (esto se hace con parentesis) y precesas la linea del fichero con Regex.

;-)
  Respuesta:  eider mauricio aristizabal erazo
tiene que ser en texto?
seria mejor manejarlo en formato xml

    Pregunta:  55506 - COMO REDONDEAR EN C#
Autor:  Elsy Lopez Guerra
Hola, necesito redondear un valor por exceso, como lo hago???
Gracias
  Respuesta:  Fernando Tejedor
Usa las funciones Floor y Ceiling:
Ejemplo
decimal num1 = 14.70M;
decimal num2 = 6.61M;

MessageBox.Show(string.Format("{0}, {1}",
Math.Floor(num1), Math.Ceiling(num2)));
  Respuesta:  eider mauricio aristizabal erazo
Hola, mira este articulo, si no te funciona me avisas

http://msdn.microsoft.com/library/spa/default.asp ?url=/library/SPA/cpref/html/frlrfSystemMathClassRoundTopic.asp

|<  <<  1 2 3 4 5 6 7 8 9 10  >>  >|