none
variable + i

    Pregunta

  • Hola quisiera saber si hay forma de hacer esto:

     Dim ConsVali = "SELECT Id,Pasillo, Nro, Disponible FROM ubicatierra WHERE Manzana =" + FormCemValida.CemUbica1.Text
            Dim i = 0
            Try
                ConectaCem()
                Dim MysqlDadap2 As New MySqlDataAdapter(ConsVali, _conectaCem)
                Dim tb2 As New DataTable
                MysqlDadap2.Fill(tb2)
                Dim a = tb2.Rows.Count
                While i <= a
                    Dim row As DataRow = tb2.Rows(i)
                    i += 1
                    Dim disp = row("Disponible")
                    If disp = "0" Then
                        BTNSEP &i.FlatAppearance.MouseOverBackColor = Color.Green
                    Else
                        BTNSEP &i.FlatAppearence.MouseOverBackColor = Color.Red
                    End If
                End While

    Donde BTNSEP es el comienzo del nombre de los botones numerados, ej: BTNSEP1, BTNSEP2, BTNSEP3, BTNSEP4.

    Y quisiera que si esta disponible cada uno se pinte de verde y sino de rojo.

    Desde ya muchísimas gracias


    viernes, 27 de enero de 2017 15:22

Respuestas

  • RobertoCAarrillo,

    No necesitas rellenar un objeto con las filas recuperadas, puedes establecer el color al botón según vas leyendo las filas.

    Try
    	Using Con As New MySqlConnection(AccesoBd.CadenaConexion.ConnectionString)
    
    		Dim ConsultaSql As String = "SELECT Id, Pasillo, Nro, Disponible FROM ubicatierra 
    							WHERE Manzana = @Manzana"
    
    		Dim Command As New MySqlCommand(ConsultaSql, Con)
    
    		Command.Parameters.AddWithValue("@Manzana", CemUbica1.Text)
    
    		Con.Open()
    		Dim Reader As MySqlDataReader = Command.ExecuteReader
    
    		While Reader.Read 'Recorrer por el conjunto de filas
    			'Obtener la referencia de un botón según la fila recuperada
    			Dim Boton = Me.Controls.OfType(Of Button).FirstOrDefault(Function(c) c.Name = 
    						String.Concat("BTNSEP", Reader("Nro")))
    
    			If Boton IsNot Nothing Then '¿Existe un nombre de botón válido?
    				Boton.FlatAppearance.MouseOverBackColor = IIf(Reader("Disponible")="0", 
    										Color.Green, 
    										Color.Red)
    			End If
    		End While
    	End Using
    Catch ex As Exception
    	MessageBox.Show(ex.Message)
    End Try

    El campo "Disponible", ¿qué tipo es? ¿no debería ser un tipo boolean?, de ser así debes de convertir a un valor booleano para realizar una comparación lógica.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Sergio Parra viernes, 27 de enero de 2017 17:44
    • Marcado como respuesta RobertoCAarrillo viernes, 27 de enero de 2017 19:17
    viernes, 27 de enero de 2017 17:19

Todas las respuestas

  • RobertoCAarrillo,

    ¿El valor de la columna [Nro] está relacionado con el número que tiene como sufijo cada nombre de botón?

    ¿Los botones los creas en tiempo de ejecución? ¿Cómo aseguras que la cantidad de filas que retorna la consulta sea la misma cantidad de botones que tienes creados?

    La resolución no es complicada pero necesito que ambos tengamos claro el caso.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 27 de enero de 2017 15:33
  • Hola, gracias por responder.

    Si, la columna Nro es el sufijo del nombre del botón. Los botones ya están en el form y son fijos ( son 254 botones) como 254 filas de registros, también fijas.

    viernes, 27 de enero de 2017 16:33
  • RobertoCAarrillo,

    No necesitas rellenar un objeto con las filas recuperadas, puedes establecer el color al botón según vas leyendo las filas.

    Try
    	Using Con As New MySqlConnection(AccesoBd.CadenaConexion.ConnectionString)
    
    		Dim ConsultaSql As String = "SELECT Id, Pasillo, Nro, Disponible FROM ubicatierra 
    							WHERE Manzana = @Manzana"
    
    		Dim Command As New MySqlCommand(ConsultaSql, Con)
    
    		Command.Parameters.AddWithValue("@Manzana", CemUbica1.Text)
    
    		Con.Open()
    		Dim Reader As MySqlDataReader = Command.ExecuteReader
    
    		While Reader.Read 'Recorrer por el conjunto de filas
    			'Obtener la referencia de un botón según la fila recuperada
    			Dim Boton = Me.Controls.OfType(Of Button).FirstOrDefault(Function(c) c.Name = 
    						String.Concat("BTNSEP", Reader("Nro")))
    
    			If Boton IsNot Nothing Then '¿Existe un nombre de botón válido?
    				Boton.FlatAppearance.MouseOverBackColor = IIf(Reader("Disponible")="0", 
    										Color.Green, 
    										Color.Red)
    			End If
    		End While
    	End Using
    Catch ex As Exception
    	MessageBox.Show(ex.Message)
    End Try

    El campo "Disponible", ¿qué tipo es? ¿no debería ser un tipo boolean?, de ser así debes de convertir a un valor booleano para realizar una comparación lógica.


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    • Propuesto como respuesta Sergio Parra viernes, 27 de enero de 2017 17:44
    • Marcado como respuesta RobertoCAarrillo viernes, 27 de enero de 2017 19:17
    viernes, 27 de enero de 2017 17:19
  • Es booleano. Muchísimas gracias. Impresionantemente claro!!!!
    viernes, 27 de enero de 2017 19:17