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:
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:
' 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 If
End 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.
' 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 if
End 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.