Flex DataGrid largura da coluna
-
18-09-2019 - |
Pergunta
Em meu aplicativo Flex eu armazenar as larguras e visiblility de colunas em um arquivo xml. Quando as cargas de aplicativos que ele lê o arquivo xml e conjuntos de valores que ele colunas conforme o caso:
for(i = 0; i < columnsOrder.length; i++){
newOrder[i] = myDG.columns[Number(columnsOrder[i]) - 1];
newOrder[i].visible = (Number(columnsVisiblity[i]) == 1);
newOrder[i].width = Number(columnsWidth[i]);
}
myDG.columns = newOrder;
myDG.invalidateList();
O problema parece estar definindo a visibilidade (que define o campo visível corretamente, mas mexe-se a largura) ... Eu tentei defini-lo depois de definir a largura (fora do circuito) e antes do loop também. Ele redimensiona as colunas corretamente, se eu não fazer nada com a visibilidade.
Todas as idéias?
Solução
Adicione uma instrução de importação na parte superior do seu arquivo de classe:
importação mx.core.mx_internal;
Em seguida, retire usando o namespace mx_internal, remova o proprietário da coluna, alterar a largura e, em seguida, reasign o pai:
public static function resizeColumn(col:DataGridColumn, size:int):void
{
var owner:* = col.mx_internal::owner
col.mx_internal::owner = null;
col.width = size;
col.mx_internal::owner = owner;
}
Isso deve fazer o truque (bem, ele fez por nós depois de um par de dias de palavrões)
Outras dicas
É você horizontalScrollPolicy conjunto para false no datagrid?
"Se a propriedade horizontalScrollPolicy do DataGrid é falsa, todas as colunas visíveis devem caber na área mostrada, eo DataGrid nem sempre irá honrar a largura das colunas se a largura total das colunas é muito pequeno ou muito grande para o displayable área."
Eu era capaz de fazê-lo funcionar, chamando o loop acima em uma função duas vezes ... a primeira vez que adicionar as colunas visíveis, a segunda vez que define a largura correta. Não é a melhor solução, mas eu não posso gastar mais tempo com ele.