Añadir registro a un grid que contiene datos pero en cualquier parte del grid

Tengo un form que tiene varios text y un grid el cual esta relacionado con una tabla y le voy agregando registro mediante un click en un botón . Hasta ahí todo de lujo !

El problema es que el usuario quiere agregar un registro en cualquier parte del grid osea en el medio de cualquier registro como se hace en excel .. Por ejemplo haciendo un click derecho sobre el grid y poder ingresar un nuevo registro en blanco EN CUALQUIER PARTE..

Usando append blank o insert se ingresa el registro en blanco pero debajo de todos los registros ya ingresados y esto no me sirve ..

Respuesta
1

Se me ocurre que podrías agregar 2 campos de tipo int a tu tabla (la que usas en el grid)... o bien trabajar con tablas cursor y es a éstas que le agregas éstos 2 campos... doy un ejemplo (y supongamos que sea una tabla de artículos de una ferretería):

Los campos son: Ord1, Ord2, Detalle (donde Ord1 int, Ord2 int y Detalle Char)

Al momento de visualizar la tabla o la tabla cursor, ésta debe estar ordenada (Index) en los campos Ord1 y Ord2, ya sabes: (Index on Ord1*100+Ord2 Tag Ordenar)

1, 10, "Pala Ancha"
2, 10, "Tornillos autoperforantes"
3, 10, "Amoladora"
4, 10, "Clavos de techo"

Ahora quieres meter un registro entre las líneas 2-10 y 3-10, al seleccionar el campo 3-10 y darle a agregar el 3 se debe convertir en 2 y el 10 en 11, entonces quedaría como 2-11, entonces como tiene un índice se quedará orenado entre el 2-10 y el 3-10...

2, 10, "Tornillos autoperforantes"
2, 11, "Nuevo registro"
3, 10, "Amoladora"

Al registrar podrías regenerar la tabla completa usando el comando:

SORT TO NuevaTablaOrdenada ON Ord1, Ord2

Ya tendrás la tabla ordenada exactamente como lo desea tu cliente; y aquí los inconvenientes...

1. Si la tabla forma parte de una BD tendrías que limpiar la original e importar los datos de la tabla ordenada, cosa que se vuelve muy pesado si la tabla contiene muchísimos registros, sumado al cuidado de que no se interrumpa el proceso en ningún momento ya que esto redundaría en perdida de datos. Aunque se podría en éste caso copiar 1ro todos los datos a una tabla nativa temporal, limpiarle e importar los datos ordenados.

En cambio si tu tabla es libre solo podrías renombrarla y al hacer el SORT TO le indicas el nombre de tu tabla original.

En lo personal en el grid trabajaría con un tabla cursor a la que le agregaría los campos de orden antes explciado; y al registrar solo grabaría los datos de la tabla.

3 respuestas más de otros expertos

Respuesta
1

Espero poder ayudarte. Cuando dices "en cualquier parte del grid" imagino que te refieres a cualquier celda. Pregunta: ¿Ese registro sera agregado en una linea que ya fue aperturada con appendblank? Si es así, basta con que t ubiques sobre la celda y grabes el dato y luego actualices la tabla con TABLEUPDATE(.T.). Si es con INSERT, debes usar un REPLACE campo WITH valor!

gracias por contestar ...

tu Pregunta: ese registro sera agregado en una linea que ya fue aperturada con appendblank? Si así es !!!

me olvide de aclarar que puedo agregar registros a la tabla desde el grid.. también para agregar un registro uso un botón de agregar con el siguiente código:INSERT INTO presupuesto (nro_presup, concepto, trabajo, unidad) ;
VALUES (VAL(thisform.text5.Text)," ", "Agregar trabajo", "Gl").. lo que me hace es agregarme una linea al principio del grid y no en el lugar que deseo que se inserte el registro y después el registro me queda al ultimo .. tenes razón uso append blank para los primeros registros insertados por lo tanto lo que necesito es que los datos se desplacen hacia abajo y me quede el registro nuevo para poder modificar los datos de la linea nueva ...

realice los cambios que me dijiste pero no me funciono .. o no se que me faltara .. me posicione con set focus en el grid y luego uso insert el código de arriba que describí pero me pone la linea al principio del grid y no en el medio de los datos ya ingresados con append blank..

gracias nuevamente por contestar ,,,

saludos!!

Disculpa la tardanza! Lo que pasa es que al usar INSERT INTO se agrega un registro a la tabla al final. Lo mismo con append blank. Abre un registro en blanco al final de la tabla. :O :O mmm... creo que no puedes ingresar un registro entre lineas del grid con foxpro (como en excel si se puede). Lo que si podes es modificar un registro que ya fue agregado entre lineas. Para eso, a como dices que podes agregar registros a la tabla desde el grid, solo modificalos directamente sobre el grid y al finalizar ejecuta un

TABLEUPDATE(.T.)

Para actualizar los cambios. Para deshacer, usa un

TABLEREVERT (.T.)

Respuesta

The grid-column property sets the width of the column of a grid item. The grid-row property sets the height of the row of a grid item. The grid-area property sets the area of a grid item. It consists of the width of the column & height of the row of a grid item.

Respuesta

Assalomu alaykum, shuni aytmoqchimanki, mukammal bukmekerlar yo'qligini unutmaslik kerak. Ulardan biri keng tanlovni taklif qiladi, ammo kichik imkoniyatlar. Shuningdek, kompaniya elektron to'lov tizimlariga pul o'tkazmaydi. Sizga мостбет sinab ko'rishingizni maslahat beraman va hozir daromad olishni boshlang! Agar sizda hech qanday ko'nikma yo'q bo'lsa, ularni ishlab chiqish juda realdir, siz tikishni muvaffaqiyatli boshlash uchun muntazam ravishda va mazmunli tarzda onlayn tikish bilan shug'ullanishingiz kerak.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas