O tamanho da grid você define no momento de criação.
Ou você está falando para ele mostrar os itens que ele possui.
Ex: dos 7 slots eu só tenho 3 itens, entao ele só mostra 3 itens.
É isso?
Se for isso, ao olhar a sua da_grid, da para perceber que ela está mais para uma lista do que para uma grid, lembrando que
lista = 1 linha
Mapa = 1 linha com "cabeçalho"
grid = n linhas e n colunas.
O jeito mais fácil seria usar uma lista, mas creio que você já está se organizando para usar a sua grid, então o jeito com ela seria criar um script de ordenação, algo mais ou menos assim
for (var i = ds_grid_width(grid); i > 0; i--)
{
for (var j = 0; j < i: j++)
{
if (grid[# 0, j] == item.nulo)
{
var temp = grid[# 0, j]
grid[# 0, j] = grid[# 0, j + 1]
grid[# 0, j + 1] = temp;
}
}
}
O que eu estou fazendo ali é iniciar um laço de repetição que vai do limite máximo da grid até o início dela.
Dentro dele eu criei um laço para ir do primeiro item até o meu limite atual, ou seja na primeira repetição do for superior eu vou olhar tudo, na segunda eu vou olhar tudo-1 e assim por diante.
Então eu vou checar se a primeira posição possui um item nulo, se possui eu quero pegar esse item e passar para frente (os itens nulos tem que ficar no final), então vou pegar o item que está na segunda posição e vou voltar ele uma e vou pegar o item na minha posição e vou avançar uma, vou repetir este processo até rodar toda a lista.
Estou fazendo de cabeça este script e ele claramente não é a melhor forma de fazer isso, logo de cara da para ver que a complexidade dele é ruim, já que a grid é pequena ele não será tão lento, mas em uma grid grande daria problema, da forma como ele está feito, ele também vai rodar por toda a grid mesmo que não tenha nenhum item nela toda, o que não é legal, depois dê uma pesquisada em algoritmos de ordenação se você quiser seguir por este caminho e fazer algo mais bem feito do que eu fiz
'