Programación General > Visual Basic para principiantes

 Borra ultima linea del msflexgrid

(1/1)

kelmax:
Como puedo borrar la ultima linea del msflexgrid sin que se genere el error "no se puede quitar la ultima fila no fija"

Nebire:
No me he dado cuanta de tu mensaje, aunque ha pasado un tiempo ya... es casi seguro que no hayas resuelto este asunto todavía, anque posiblemente hays cambiado a otra solución o simplemente desistido. Posiblemente la mejor solución que hayas encontrado sea 'vaciarla' de contenido y es normal que no satisfaga la solución.

Siempre se exige que exista una línea no fija, es posible retirarla, pero no de cualquier forma, sino usando el método concreto que se detalla:
Al iniciar la aplicación si sucede que aún no tenemos ninguna línea, es cuando podemos conseguir quitarla, mira que sencillo es el código:

--- Código: Visual Basic --- Private Sub Form_Load()    Me.Show    Malla.FixedRows = 1 ' o x, las que tengamos    Malla.Rows = Malla.FixedRows  ' desaparecen todas las líneas que no son fijas,   End Sub  
Esto lo podremos hacer siempre que queramos, pero obviamente si tenemos datos, requeriría volver a añadirlos. Por lo que es cuestión de recurrir a un simple 'método'... supongamos que tenemos 1 líneas fijas y 42 líneas no fijas + esa línea que no quieres tener. Más de lo mismo, observa:


--- Código: Visual Basic ---  ' desde la rutina llamante podría haber líneas como estas:' de hecho una vez que pruebes el código anterior, mete estas 4 líneas al final del form_load para poder probar la rutina LimitarLineas.   For k = 1 To 43        Call Malla0.AddItem("", 1)    Next    Call LimitarLineas(10)    Private Sub LimitarLineas(ByVal n As Long)    Dim fixed As Long        fixed = Malla.FixedRows  ' 1º guardamos el número actual de líneas fijas    Malla.FixedRows = fixed + n  ' ahora aumentamos las líneas fijas hasta las que queremos conservar    Malla.Rows = Malla.FixedRows  ' desaparecen todas las líneas que no son fijas,    If n > 0 Then    ' si no varió el número de líneas fijas no necesitamos REStablecer este valor, además de no necesario, produciría error.        Malla.FixedRows = fixed  ' restablecemos el número de líneas fijas previo    End IfEnd Sub  
Por otro lado, es posible eliminar líneas directamente siempre que todavía haya más líneas que las fijas, como no podemos estar siempre seguros de esto, podemos desviar la eliminación de líneas de otro modo.
 

--- Código: Visual Basic --- ' n indica la línea índice que se quiere eliminar. Private Sub EliminarLinea(ByVal n As Long)     ' quizás nos interese convertirlo en una función , en cuyo caso podríamos y devolver true cuando se elimina y false cuando no... eso queda a tu trabajo.         if (n < Malla.fixedRows) or (n => Malla.Rows) then exit sub ' para eliminar líneas fijas, mejor usar otra rutina distinta así se es consciente de què se está eliminado    if Malla.rows = Malla.FixedRows + 1 then       'If n = Malla.fixedRows then ' con las 2 comprobaciones previas esta resulta innecesaria pero si modificamos aquellas esta podría llegar a ser necesaria.              Malla.Rows = Malla.FixedRows  ' desaparecen todas las líneas que no son fijas, que siempre que entre aquí será solamente 1 más.        'End if    else         Malla.RemoveItem(n)    end ifEnd Sub  
Nota: Malla es una instancia de un control flexgrid o mshflexgrid....

Queda a tu esfuerzo diseñar una rutina cuando lo que queremos es eliminar unbloque entero de líneas y no sólo una...
Pista: elimina todas, menos 1 (estén salteadas o juntas)  luego deriva la eliminación de ésta, que hemos dejado hacia la rutina anterior, pués allí ya se chequea si la línea a eliminar es o no justo la única que queda junto a las líneas fijas.

zynid3as:
Hola Nebire, execelnte solución,
yo lo he eimplementado y todo bien, pero
el el problema es que al no tener valores, esa única fila pierde el formato de cabecera, se queda como un dato más.... como solucionaría eso


saludos

Navegación

[0] Índice de Mensajes

Ir a la versión completa