• Domingo 8 de Diciembre de 2024, 16:37

Autor Tema:  Borra ultima linea del msflexgrid  (Leído 6366 veces)

kelmax

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Borra ultima linea del msflexgrid
« en: Jueves 15 de Octubre de 2009, 18:26 »
0
Como puedo borrar la ultima linea del msflexgrid sin que se genere el error "no se puede quitar la ultima fila no fija"

Nebire

  • Miembro HIPER activo
  • ****
  • Mensajes: 670
    • Ver Perfil
Re: Borra ultima linea del msflexgrid
« Respuesta #1 en: Sábado 30 de Enero de 2010, 11:30 »
0
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
  1.  
  2. Private Sub Form_Load()
  3.     Me.Show
  4.     Malla.FixedRows = 1 ' o x, las que tengamos
  5.     Malla.Rows = Malla.FixedRows  ' desaparecen todas las líneas que no son fijas,  
  6. End Sub
  7.  
  8.  

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
  1.  
  2.  ' desde la rutina llamante podría haber líneas como estas:
  3. ' 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.
  4.    For k = 1 To 43
  5.         Call Malla0.AddItem("", 1)
  6.     Next
  7.     Call LimitarLineas(10)
  8.  
  9.  
  10.  
  11.  
  12. Private Sub LimitarLineas(ByVal n As Long)
  13.     Dim fixed As Long
  14.    
  15.     fixed = Malla.FixedRows  ' 1º guardamos el número actual de líneas fijas
  16.     Malla.FixedRows = fixed + n  ' ahora aumentamos las líneas fijas hasta las que queremos conservar
  17.     Malla.Rows = Malla.FixedRows  ' desaparecen todas las líneas que no son fijas,
  18.     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.
  19.         Malla.FixedRows = fixed  ' restablecemos el número de líneas fijas previo
  20.     End If
  21. End Sub
  22.  

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
  1.  
  2. ' n indica la línea índice que se quiere eliminar.
  3. Private Sub EliminarLinea(ByVal n As Long)
  4.      ' 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.    
  5.  
  6.     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
  7.     if Malla.rows = Malla.FixedRows + 1 then
  8.        'If n = Malla.fixedRows then ' con las 2 comprobaciones previas esta resulta innecesaria pero si modificamos aquellas esta podría llegar a ser necesaria.
  9.               Malla.Rows = Malla.FixedRows  ' desaparecen todas las líneas que no son fijas, que siempre que entre aquí será solamente 1 más.
  10.         'End if
  11.     else
  12.          Malla.RemoveItem(n)
  13.     end if
  14. End Sub
  15.  

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.
«Ma non troppo»
----> ModoVacaciones = False<----

zynid3as

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re:Borra ultima linea del msflexgrid
« Respuesta #2 en: Jueves 25 de Agosto de 2011, 17:37 »
0
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