|
5571
|
Programación / .NET (C#, VB.NET, ASP) / Re: Dónde debo de colocar el .Clear();
|
en: 30 Abril 2015, 04:50 am
|
Buenas 1. Los índices empiezan por 0, si quieres determinar que haya un item seleccionado en un combobox de la manera en que lo estás haciendo entonces debes evaluar el valor -1, donde -1 es ninguno, 0 el el primer item, 1 el segundo item, etc... if (ComboBox.SelectedIndex != 1) { // ... }
2. Eliminar el texto del combobox no altera el índice de selección, el valor de la propiedad SelectedIndex seguirá siendo el mismo que estaba seleccionado antes de eliminar el texto, a menos que tengas un item vacío (una linea en blanco) y tu intención sea seleccionar ese item vacío, cosa que no has especificado. Si lo que quieres es deseleccionar el item entonces puedes hacer: ComboBox1.SelectedItem = Nothing;
o también: ComboBox1.SelectedIndex = -1;
3. ¿Porque limpias el DataSet en cada comparación de cada ComboBox?, se que tienes dudas sobre eso, pero no llego a entender con que intención lo haces tantas veces seguidas, obviamente es innecesario. No me manejo con tareas que requieran el uso de SQL, pero si necesitases limpiar las filas de las tablas del dataset entonces hazlo una vez y justo antes de rellenar usando el método Fill del SQLAdapter, en el método cargarActas2: ... ds.Clear(); dataAdap.Fill(ds); ...
Y digo " si necesitases", por que realmente no se si es necesario ya que no he comprobado que el método Fill del SQLAdapter las limpie antes de rellenar, cabría esperar que si lo hiciese, pero repito de nuevo que no manejo SQL, si no estás seguro compruébalo por ti mismo para salir de dudas. 4. No estás respetando el buen uso de la cantidad de espacios en blanco en la query de SQL ni los valores de String que debes encerrar entre comillas, aunque repito que no manejo SQL, pero algo conozco sin haberlo llegado a usar, de todas formas toda esa maraña de ifs lo puedes simplificar para construir esa parte de la query de manera más dinámica, por ejemplo así: Private filterList As New List(Of String) Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _ Handles MyBase.Load ' Set property names as tags Me.ComboBox1.Tag = "iddpto" Me.ComboBox2.Tag = "idprofe" Me.ComboBox3.Tag = "idmate" Me.ComboBox4.Tag = "idperi" Me.ComboBox5.Tag = "idtiposem" End Sub Private Sub ComboBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) _ Handles ComboBox1.SelectedIndexChanged, ComboBox2.SelectedIndexChanged, ComboBox3.SelectedIndexChanged, ComboBox4.SelectedIndexChanged, ComboBox5.SelectedIndexChanged Dim cb As ComboBox = DirectCast(sender, ComboBox) Me.filterList.Remove(Me.filterList.Find(Function(item As String) item Like String.Format("AND A.{0}*", cb.Tag.ToString))) If cb.SelectedIndex <> -1 Then Me.filterList.Add(String.Format("AND A.{0}='{1}'", cb.Tag.ToString, cb.SelectedItem.ToString)) End If Debug. WriteLine(String. Join(" ", Me. filterList)) #End If End Sub
Traducción a C#: private List <string> filterList = new List <string>(); private void Form1_Load(object sender, EventArgs e) { // Set property names as tags this.ComboBox1.Tag = "iddpto"; this.ComboBox2.Tag = "idprofe"; this.ComboBox3.Tag = "idmate"; this.ComboBox4.Tag = "idperi"; this.ComboBox5.Tag = "idtiposem"; } // nota: Este event-handler lo usas para suscribirte al evento 'SelectedIndexChanged' de TODOS los ComboBoxes. private void ComboBox_SelectedIndexChanged(object sender, EventArgs e) { ComboBox cb = (ComboBox)sender; this.filterList.Remove(this.filterList.Find((string item) => item.StartsWith(string.Format("AND A.{0}", cb.Tag.ToString)))) if (cb.SelectedIndex != -1) { this.filterList.Add(string.Format("AND A.{0}='{1}'", cb.Tag.ToString, cb.SelectedItem.ToString)); } // #if DEBUG Debug.WriteLine(string.Join(" ", this.filterList)); // #endif }
Haznos saber si alguna de estas correcciones o sugerencias ha corregido el problema que tienes. Saludos
|
|
|
5572
|
Foros Generales / Foro Libre / Re: Los mitos de las computadoras
|
en: 30 Abril 2015, 03:17 am
|
La música del final de estilo Chiptune me ha gustado mucho, ¿podrías indicar como se llama el tema?  El mito de los pedófilos no es un mito, es la realidad, no está todo lleno de pedófilos criminales, pero hoy en día es algo parecido, pues solo hay que entrar en cualquier chat para comprobar que el 99% de usuarios son gente masculina y con el pito tan salido que se tirarían hasta a su hermana de 14 años si se la encontrasen chateando en la sala sin saber quien es. Saludos
|
|
|
5574
|
Programación / Programación General / Re: [Estimación]Controlar tiempo de desarrollo.
|
en: 30 Abril 2015, 02:13 am
|
¿Cómo estimar el tiempo de desarrollo?, bueno, para empezar, la primera estimación para un proyecto que dure más de unas pocas semanas podría tener que ser re-estimado con regularidad, lo mejor para no comerse marrones es comunicarle al cliente tu intención de volver a contactar con él tras pasar un tiempo indefinido y/o mantenerle informado eventuálmente de los avances del proyecto. Poder realizar una buena estimación depende de cada programador, de la persona y de la magnitud de la tarea en cuestión, hay que desarrollar un modelo mental para evaluar/estimar distintos factores por separado, cómo los requisitos del proyecto, el riesgo (margen de error), la validación, y factores referentes a tus habilidades de programación cómo la velocidad, y el tiempo que duermes o que puedes programar, aparte, a ser posible se debe recurrir a referencias de proyectos anteriores que sean parecidos a la tarea que el cliente te está pidiendo para así poder elaborar una estimación más aproximada. Yo también tuve problemas en ese sentido cuando empecé de forma freelance (sigo siendo freelance, no profesional), estimaba un plazo de entrega bastante corto superando mis espectativas para satisfacer al cliente (sin mala intención), a veces yo podía cumplir ese plazo de entrega pero otras veces tenía que alargarlo unos días o semanas más (o lo que fuese), con la experiencia uno se da cuenta de que el cliente siempre se agarra a lo primero que le dices, lo primero que salga de tu boca es lo único que va a contar durante el periodo de ese trabajo, cualquier reectificación va a generar problemas, es decir, si al cliente le dices que en 3 semanas puedes desarrollar la aplicación y a la semana no se lo puedes entregar, hay muchas probabilidades de que ese cliente te lo acabe hechando en cara que le dijiste "3 semanas" y éste te empiece a agobiar cada día por que estás tardando "más de lo esperado", por ese motivo, siempre es mejor exagerar un poquito el plazo de entrega, por que aparte de que siempre pueden surgir imprevistos, si se lo puedes entregar antes de ese plazo de tiempo "exagerado" será algo positivo por que tecnicamente lo acabaste antes de tiempo. EDITO: Este libro te serviría de ayuda: ➢ Software Estimation: Demystifying the Black Art (Developer Best Practices)Saludos
|
|
|
5575
|
Programación / Scripting / Re: Como comprobar registro
|
en: 29 Abril 2015, 23:31 pm
|
un .bat que compruebe si una clave con su valor se agregó correctamente en el registro de Windows. Si estás agregando tú la clave utilizando el comando REG, entonces solo debes evaluar el código de salida del proceso, siendo 0 satisfactorio, y no-0 error: Reg.exe Add "HKCU\Test" /V "Valor" /D "Datos" /F 1>NUL 2>&1 If %ErrorLevel% EQU 0 ( Echo Success ) Else ( Echo Failed ) Lo mismo pero utilizando los operadores: (Reg.exe Add "HKCU\Test" /V "Valor" /D "Datos" /F)1>NUL 2>&1 && ( Echo Success ) || ( Echo Failed ) En cambio, si la clave ya está añadida en el registro, entonces puedes utilizar el parámetro Query del comando Reg para hallar la clave (y buscar los datos del valor con el comando Find/Findstr): ( (Reg Query "HKCU\Test" /V "Valor" /T "Reg_SZ") | (Findstr "\<Datos\>") )1>Nul 2>&1 ^ && (Echo Success) ^ || (Echo Failed) Saludos
|
|
|
5577
|
Programación / .NET (C#, VB.NET, ASP) / Re: como hacer q se agreguen las filas en radGridView
|
en: 29 Abril 2015, 22:54 pm
|
con el primer código q postee (no me había dado cuenta) al final m trae los datos de la consulta pero crea nuevamente las 5 columnas al lado de las 5 q yo diseñe y m coloca ahí los datos Claro, eso si que sucede, es normal, te vuelvo a sugerir que leas a fondo la documentación que hay en el último enlace que te he mostrado para que entiendas lo que está pasando. Hay varias formas de solucionarlo, pero esta creo que es la más sencilla (ya que no requiere el diseño de classes adicionales ni nada) Supongamos que tienes una columna agregada con el nombre "GridColumn1": RadGridView1.Columns.Add(name:="GridColumn1", headerText:="Mi Columna");
En primer lugar debes desactivar la auto generación de columnas al bindear: RadGridView1.AutoGenerateColumns = False;
Y teniendo una instancia de la DataTable cómo esta, donde la columna se llama " Data Column": DataTable dt = new DataTable ();dt.Columns.Add("Data Column"); dt.Rows.Add("Value");
Asignas el nombre de ese campo a la columna del Grid: RadGridView1.Columns(columnName:="GridColumn1").FieldName = "Data Column";
Asignas el DataSource, y listo: RadGridView1.DataSource = dt.DefaultView;
Otra solución también muy sencilla sería eliminar las columnas que agregaste manuálmente, y renombrar las columnas que se auto-generaron al asignar el data source. DataTable dt = new DataTable (); dt.Columns.Add("Data Column 1"); dt.Columns.Add("Data Column 2"); dt.Rows.Add({"Value 1", "Value 2"}); RadGridView1.BeginUpdate(); RadGridView1.Columns.Clear(); RadGridView1.DataSource = dt.DefaultView; RadGridView1.Columns(0).HeaderText = "Columna 1"; RadGridView1.Columns(1).HeaderText = "Columna 2"; RadGridView1.EndUpdate();
Saludos.
|
|
|
5578
|
Programación / .NET (C#, VB.NET, ASP) / Re: como hacer q se agreguen las filas en radGridView
|
en: 29 Abril 2015, 17:39 pm
|
Las classes que puedes usar cómo DataSource en los controles de Telerik deben cumplir unas condiciones específicas (tener implementadas ciertas interfaces), aunque en un principio la class DataTable si que funciona correctamente, lo aconsejable por Telerik es crear tu propia Class respetando esas reglas de uso. En tu caso dices que no te funciona, para ser sinceros no se me ocurre el por qué, pero si cómo puedes intnetar solucionarlo... Prueba a declarar esa DataTable fuera del sub, prueba a asignar la propiedad DataTable.DefaultView al radGridView.DataSource, y si las filas siguen sin aparecer entonces prueba a asignar una consulta paralela para evitar "cambios" indeseados en el DataSource (quizás el GarbageCollector esté reciclando la Datatable antes de tiempo y por eso desaparecen los datos de tus filas): VB.Net: Dim dt As New DataTable() With dt .BeginLoadData() .Columns.Add("Column1") .Columns.Add("Column2") .Rows.Add({"Value1", "Value2"}) .EndLoadData() .AcceptChanges() End With RadGridView1.DataSource = dt.DefaultView.AsParallel dt.Clear()
C#: DataTable dt = new DataTable (); dt.BeginLoadData(); dt.Columns.Add("Column1"); dt.Columns.Add("Column2"); dt.Rows.Add({"Value1", "Value2"}); dt.EndLoadData(); dt.AcceptChanges(); RadGridView1.DataSource = dt.DefaultView.AsParallel; dt.Clear();
Te sugiero que leas la documentación online de Telerik, ayuda bastante a saber cómo empezar a manejarse en ciertos aspectos de cada control: ➢ RadGridView OverView➢ Databinding RadGridViewAdemás, si has registrado la versión Trial de Telerik UI entonces puedes acudir al foro de soporte y ellos sabrán mejor cómo solucionarte el problema, esto te podría ayudar, aunque es para WPF: ➢ Bind Datatable with RadGridViewSaludos
|
|
|
5579
|
Sistemas Operativos / Windows / Re: ¿Puede un virus joderte los drivers mouse?
|
en: 29 Abril 2015, 04:45 am
|
creo que es el crypter el que hace eso. Tengo mis dudas de que un producto comercial de poco nivel se esté vendiendo con segundas intenciones ...maliciosas. De todas formas, si quieres salir de dudas tienes varios métodos para hacerlo, puedes intentar descompilar el programa y analizar las instrucciones para comprobar si le hacen algo al mouse, o también puedes monitorizar las acciones del proceso (con Process Monitor de SysInternals por ejemplo), y, para intentar verificar que no se trate de un "virus camuflado" puedes dejar que el servicio de Anubis analice/monitorice el exe por ti.
El cursor no se mueve, ni siquiera esta, no digo que lo joda de verdad, sino que me joda los drivers del sistema. Bueno entonces el problema es que la imagen del cursor desaparece, es invisible, pero tu puedes seguir moviendo el mouse y hacer click, ¿verdad?, en ese caso no necesariamente tiene por que ser consecuencia de un virus, hay otros posibles motivos, por ejemplo, podrías tener alguna tecla "agarrotada" en el teclado sin darte cuenta de ello y con la opción de " Ocultar puntero mientras se está escribiendo" activada, o simplemente por causas desconocidas se han podido alterar o eliminar las imágenes actuales del cursor, las cuales puedes reasignar en cualquier momento para corregir el problema, puedes revísar si están bien ambas cosas en las opciones del mouse, en el panel de control. Saludos!
|
|
|
5580
|
Sistemas Operativos / Windows / Re: ¿Puede un virus joderte el mouse?
|
en: 29 Abril 2015, 03:29 am
|
¿Puede un virus joderte el mouse? El software no puede dañar directamente el hardware, pero en ciertas circunstancias puede acondicionar el equipo alterando ciertos valores (cómo por ejemplo en este caso la frecuencia del mouse) para provocar un daño físico a corto o largo plazo. De todas formas entiendo que por "joder el mouse" te refieres al comportamiento que percibes en la interfáz del sistema operativo, es decir, el cursor o coordenadas que representan el movimiento del dispositivo y/o la respuesta de los botones del dispositivo, si, por supuesto que un virus/software puede dañar un mouse en ese sentido. Nota: Recuerda que tecnicamente un crypter no es un virus, que lleve un regalito en su interior ya sería otra cosa.
¿Como cojones puede hacer un crypter eso? Cualquier software capacitado, de manera intencionada o accidental puede interferir con los mensajes del mouse, alterarlos (hookearlos procesarlos), y también bloquear la entrada (el input) del dispositivo para dejarlo inutilizable indefinidamente. ➢ Mouse Input Notifications
¿Que comando usa para bloquear el mouse? Aparte de poder alterar el comportamiento del dispositivo de la manera que he mencionado arriba, y aparte de otras funciones que no nombraré a continuación (cómo SendMessage, PostMessage, y Mouse_Event), se puede recurrir a las siguientes funciones de la API de Windows para: Alterar valores del dispositivo: ➢ SystemParametersInfo - MSDNSimular eventos del dispositivo: ➢ SendInput function - MSDNBloquear la entrada del dispositivo: ➢ BlockInput function - MSDNSaludos
|
|
|
|
|
|
|