FileGrid

O FileGrid componente é uma grade especializada para gerenciar registros do Dataverse cujo conteúdo principal é uma única coluna de arquivo. Ele envolve MainGrid e sobrepõe o upload arrastando e solta, pré-visualização e download por linha, além de um download zip-pack em massa de cada arquivo carregado. A grade também respeita a lista de extensões bloqueadas em todo o ambiente do Dataverse e os limites de tamanho por coluna, e participa / MainContext RecordContext salva pipelines quando um deles está dentro do escopo.

Exemplo

Gerencia os uploads de arquivos na ppp_file tabela de demonstração (o arquivo em si fica na ppp_data coluna). A grade é envolvida com MainContext botões de Salvar e Atualizar — arquivos perdidos ficam na fila na memória em vez de clicar no Dataverse, e a OnBeforeSave demo cancela o estado real de save e mock-reset. Tente arrastar um PDF ou imagem para a grade, selecionar várias linhas e clicar em Download All (repare no zip) e clique no ícone Preview em uma única linha. Você precisa estar logado para ver o botão Upload — arquivos que você não possui são visíveis, mas somente leitura.

Exemplo de reação
Exemplo de Blazor
Você precisa estar logado para enviar, editar ou excluir arquivos. Registros que você não possui são visíveis, mas somente leitura.
Salvar Atualizar
Arquivos Ativos
Baixar tudo
Arquivos Ativos
Baixar tudo

Tamanho da página

102050100
Nome do arquivo
Criado em
Dados
chart.png4/22/2026 1:02 AM
chart.png
PowerPortalsProDemo_1_0_0_1 (1)4/22/2026 1:14 AM
PowerPortalsProDemo_1_0_0_1 (1).zip
Sample — API Schema4/22/2026 2:27 PM
api-schema.xml
Sample — App Configuration4/22/2026 2:27 PM
app-config.json
Sample — Brand Blue4/22/2026 2:27 PM
brand-blue.png
Sample — Brand Green4/22/2026 2:27 PM
brand-green.png
Sample — Brand Red4/22/2026 2:27 PM
brand-red.png
Sample — Client Script4/22/2026 2:27 PM
app.js
Sample — Client Types4/22/2026 2:27 PM
app.ts
Sample — Deploy Log4/22/2026 2:27 PM
deploy.log
Sample — Environment Settings4/22/2026 2:27 PM
settings.yaml
Sample — Landing Page4/22/2026 2:27 PM
index.html
Sample — Meeting Notes4/22/2026 2:27 PM
meeting-notes.md
Sample — Program Entry4/22/2026 2:27 PM
Program.cs
Sample — Project Archive4/22/2026 2:27 PM
archive.zip
Sample — Project Brief4/22/2026 2:27 PM
project-brief.txt
Sample — Quarterly Revenue4/22/2026 2:27 PM
revenue-q1.csv
Sample — Release Checklist4/22/2026 2:27 PM
release-checklist.txt
Sample — Stylesheet4/22/2026 2:27 PM
styles.css
supo2.png4/22/2026 1:02 AM
supo2.png
tooltip.jpg4/22/2026 1:02 AM
tooltip.jpg
React TypeScript
Razor

Uso Básico

Especifique a tabela e o nome lógico da coluna do arquivo que a grade deve gerenciar. Os botões Upload, Substituir Arquivo, Download All e Delete aparecem automaticamente; arquivos também podem ser lançados na grade. Passe um <Buttons> fragmento de renderização para adicionar seus próprios botões de barra de ferramentas junto com os integrados — o mesmo padrão MainGrid e SubGrid suporte.

React
Blazor

Injeção Automática de Coluna de Arquivo

Se o FetchXML e a lista de colunas da visualização ativa ainda não incluem o FileColumn, a grade o enxerta em uma cópia clonada, de modo que o nome do arquivo, o ícone de tipo e os ícones de prévia/download por linha sempre aparecem — independentemente da visualização escolhida pelo usuário. A instância de visualização compartilhada no cache fica intocada, então outras grades não são afetadas.

React
Blazor

Tamanho Máximo do Arquivo

Use MaxFileSizeBytes para limitar o tamanho dos arquivos enviados. A grade limita seu valor ao menor entre os metadados da MaxSizeInKB coluna e a configuração do maxuploadfilesize ambiente, então um arquivo rejeitado do lado do servidor não pode ser colocado em fila em primeiro lugar. Arquivos acima do limite efetivo produzem um diálogo antes de serem enviados para o Dataverse.

React
Blazor

Extensões Permitidas

Passe AllowedExtensions para restringir uploads a uma lista branca de extensões. Arquivos rejeitados geram um diálogo explicando quais extensões são aceitas. Quando deixada sem definir, qualquer extensão é permitida (sujeita à lista de bloqueios do ambiente abaixo).

React
Blazor

Lista de Bloqueio Ambiental

Ambientes Dataverse mantêm uma blockedattachments lista que rejeita certas extensões (SVG, EXE, BAT, JS, etc.) independentemente do chamador. Ele FileGrid lê essa lista no init via chamada IPowerPortalsProService.GetEnvironmentFileSettingsAsync() , armazena em cache por uma hora e rejeita arquivos correspondentes do lado do cliente com uma mensagem amigável em vez de uma falha do lado do servidor. A lista de bloqueio ambiental sempre prevalece AllowedExtensions — a lista de permitir de uma coluna não pode sobrescrever um bloco em nível ambiental.

Não é possível enviar SVGs?

Ambientes Dataverse bloqueiam svg por padrão porque SVGs podem carregar scripts embarcados. Se precisar de uploads SVG, remova-o da configuração de Definir extensões de arquivo bloqueadas para anexos no centro de administração do Power Platform — essa grade detectará a mudança em até uma hora.

Bloqueio de Permissão

O botão Upload e a ativação da zona de lançamento honram se o usuário atual do portal tem Create permissão na tabela de alvo. Quando o usuário não tem criar, o botão de Upload fica oculto e arrastar arquivos pela grade é inopável — a aplicação do lado do servidor ainda funciona como backstop. A permissão é resolvida por ITablePermissionCache meio de implementações personalizadas ITableRecordPermissionHandler que alimentam a mesma lógica de gates. O botão Upload também se oculta automaticamente sempre que uma ou mais linhas são selecionadas, para manter a barra de ferramentas organizada.

Prévia e Download por Fileira

A coluna do arquivo é renderizada como [type-icon] filename [eye] [download]. O ícone de Pré-visualização abre — FilePreviewDialog veja Visualização abaixo para ver como cada tipo de arquivo se apresenta. O ícone de Download transmite o arquivo pelo FileDownload componente JSInterop. Qualquer um dos ícones pode ser desativado por grade via AllowPreviewForFileColumns / AllowDownloadForFileColumns.

React
Blazor

O ícone Pré-visualização só aparece para tipos de arquivos que o diálogo pode renderizar — extensões não suportadas pulam o ícone em vez de mostrar uma possibilidade quebrada. Ambos os ícones de ação estão ocultos em linhas de criação pendente (registros que ainda não foram salvos no Dataverse).

Renderização de Prévia

Ele FilePreviewDialog escolhe um renderizador com base na extensão do arquivo:

  • Imagens (png, jpg, jpeg, gif, bmp, webp, svg) — alinhadas <img> com uma URL de dados base64. Limitado a 70 vh, então imagens muito altas permanecem roláveis dentro do diálogo.
  • PDFs — carregados como uma URL de blob em um <iframe> so o visualizador embutido do navegador gerencia rolagem de várias páginas, zoom, busca e seleção de texto. A URL do blob é revogada ao fechar o diálogo.
  • Markdown (md, markdown) — convertido para HTML do lado do servidor via Markdig com suas extensões avançadas (tabelas, listas de tarefas, código vendido, autolinks, notas de rodapé) e mostrado em uma aba Prévia. Uma segunda aba de Texto mostra a fonte bruta com realce de sintaxe. O passthrough HTML bruto na fonte é removido antes da renderização, então não .md é possível contrabandear <script> ou um <iframe>arquivo .
  • Texto fonte e estruturado (json, xml, yaml, yml, html, htm, js, ts, cs, css) — renderizado em um <pre> com highlight.js coloração. A linguagem é escolhida da extensão via FileTypeIcons.GetSyntaxLanguage; apenas as linguagens anunciadas são agrupadas para manter o tamanho do ativo pequeno. O destaque passa por um módulo colocalizado FilePreviewDialog.razor.ts sobre interoperação JS — se a chamada de interoperabilidade falhar, o diálogo silenciosamente volta para texto sem cor.
  • Texto simples (txt, log, csv) — renderizado em um <pre> sem ressaltamento. highlightAuto é intencionalmente não usado porque suas suposições em trechos curtos (um pequeno log ou uma única linha CSV) produzem cores mais confusas do que nenhuma cor.
  • Zip archives (zip) — analisados em memória via System.IO.Compression.ZipArchive e renderizados como um painel dividido: uma árvore dobrável à esquerda (as pastas primeiro, em ordem alfabética, com tamanho por entrada e última modificação aparecem ao passar o cursor), e a pré-visualização da entrada selecionada à direita. O painel direito é aninhado FilePreviewContent, então arquivos internos passam pela mesma consulta de renderizador — imagens, PDFs, fonte destacada, markdown e até zip-within-zip todos pré-visualizam da mesma forma que fariam standalone. O arquivo nunca é extraído para o disco.

Baixar Tudo (Zip)

O botão Download All da barra de ferramentas transmite todos os arquivos atualmente renderizados na grade como um único zip, embutido na memória do lado do servidor ZipArchive e canalizado pelo circuito Blazor — sem necessidade de endpoint HTTP extra. Nomes de arquivo duplicados recebem um (2)sufixo , (3) . Configure AllowDownloadAll="false" para ocultar o botão sem desabilitar os ícones de download por linha.

React
Blazor

Personalizando o Registro Criado

Por padrão, cada arquivo enviado cria um registro mínimo com apenas a coluna do arquivo preenchida. Para tabelas com colunas adicionais obrigatórias — ou para semear outros dados — passe OnUploadRecordAsync e retorne um . TableRecord O delegado é assíncrono, então você pode consultar serviços, resolver consultas ou gerar nomes antes de retornar.

React
Blazor

MainContext / Integração RecordContext

Quando a grade está aninhada dentro de um MainContext ou RecordContext, os uploads são posicionados na lista de criação pendente da grade, em vez de serem criados imediatamente. Os contextos IsDirty pais invertem para true, e nos SaveAsync registros em estágio (com seus FileValue bytes) são agrupados ExecuteMultipleAsync — que cuida do upload do arquivo em blocos pós-criação para cada registro. Isso mantém os uploads de arquivos transacionais com o restante do formulário.

React
Blazor

As linhas de criação pendente aparecem imediatamente na grade com o ícone do tipo de arquivo e o nome do arquivo, mas sem os ícones de Prévia ou Download (ainda não há arquivo de servidor). Eles são removidos da lista pendente quando o contexto é salvo, ou resetados via RefreshContextButton / MainContext.ResetState().

React Blazor

FileGrid Classe

Parâmetros

Nome
Tipo
Padrão
Descrição
AllowChangingPageSizebool
True
Se o usuário pode alterar o tamanho da página via menu suspenso de paginação. Encaminhado para FluentGridBase.AlpermitMudandoTamanhoPágina.
AllowDownloadAllbool
True
Se o botão 'Download All' da barra de ferramentas está renderizado. O padrão é verdadeiro. Cenário para falsar em grades somente leitura ou orientadas a exibição onde a exportação em massa não é Apropriado — o ícone de download por linha ainda funciona quando FileGrid.AllowDownloadForFileColumns está ativado.
AllowDownloadForFileColumnsbool
True
Se células de colunas de arquivo e imagem renderizam um ícone de download por linha no final Edge. O padrão é verdadeiro. Encaminhado para FluentGridBase.AllowDownloadForFileColumns.
AllowedExtensionsIReadOnlyCollection<string>?
Lista opcional de extensão (com ou sem o ponto inicial, indistinto a maiúsculas). Quando ativados, arquivos cuja extensão não está na lista são rejeitados antes do upload. Quando nulo, qualquer extensão é aceita.
AllowPreviewForFileColumnsbool
True
Se células de colunas de arquivo e imagem renderizam um ícone de pré-visualização por linha no final Edge. O padrão é verdadeiro. Encaminhado para FluentGridBase.AllowPreviewForFileColumns.
AllowSearchbool
True
Se deve renderizar a caixa de busca em grade. Encaminhado para GridBase.AllowSearch.
AutoAddFileColumnIfMissingFromViewbool
True
Se a grade se adiciona FileGrid.FileColumn automaticamente à visualização ativa quando a visualização ainda não inclui isso. O padrão é verdadeiro , então os dados do arquivo ficam visíveis não importa que a visão é escolhida pelo usuário. Defina como false para que a visão seja a única fonte de Verdade para colunas renderizadas — útil quando uma visualização mostra deliberadamente apenas metadados (nome, upload-on, etc.) sem a célula do arquivo.
BorderVisiblebool
True
Se a grade desenha sua borda temática. Encaminhado para FluentGradeBase.BordaVisível.
ButtonsRenderFragment?
Botões opcionais de grade fornecidos pelo chamador (renderizados junto com os botões de arquivo embutidos).
CustomViewDefinitionsList<GridViewDefinition>?
Definições de visualização personalizadas (FetchXML inline), encaminhadas para GridBase.CustomViewDefinitions.
DefaultItemsPerPageint
50
Tamanho padrão da página. Encaminhado para GridBase.DefaultItemsPerPage.
DefaultViewIdGuid?
ID de visualização padrão opcional, encaminhado para GridBase.DefaultViewId.
FileColumn*string
O nome lógico da coluna do arquivo nesta FileGrid.TableName grade gerencia. Obrigatório porque um registro pode expor várias colunas de arquivo; A rede precisa saber Qual deles é direcionado para as ações de carregar/baixar/pré-visualizar.
FullSizebool
False
Se a grade ocupa toda a altura do seu contêiner. Encaminhado para FluentGridBase.FullSize.
HidePagingbool
False
Oculte completamente os controles de paginação. Encaminhado para GridBase.HidePaging.
IncludeSearchInPersistedStatebool
False
Se deve incluir o texto da busca ativa na URL de estado persistida. Encaminhado para GridBase.IncludeSearchInPersistedState.
MaxFileSizeByteslong
134217728
Limite superior em um único upload, em bytes. Arquivos maiores que isso são rejeitados do lado do cliente com um diálogo. Padrão é 128MB — o limite documentado do Dataverse para colunas de arquivos.
MaxHeightstring?
Altura máxima que o corpo da grade deve expandir. Encaminhado para GridBase.MaxHeight.
MinHeightstring?
Altura mínima que o corpo da grade deve ocupar. Encaminhado para GridBase.MinHeight.
OnUploadRecordAsyncFunc<string, byte[], Task<TableRecord>>?
Personaliza o registro criado para cada arquivo enviado. Quando definido, a grade aguarda o delege com o nome do arquivo e bytes e usa o retorno Models.TableRecord como o registro a ser criado (que deve ter a coluna do arquivo preenchida). Quando nulo, a grade cria um registro mínimo com apenas a coluna do arquivo preenchida. Assíncrono, Os chamadores podem buscar defaults, resolver consultas ou acessar outros serviços antes de retornar O recorde.
PageSizesIEnumerable<int>
As opções de tamanho de página são mostradas no menu suspenso de tamanho da página da grade. Encaminhado para GridBase.PageSizes.
PagingModeGridPagingMode
Paged
Modo de paginação. Encaminhado para FluentGridBase.PagingMode.
PersistedStateQueryParameterstring?
Nome do parâmetro da consulta URL que persiste o estado interativo da grade. Encaminhado para GridBase.PersistedStateQueryParameter.
SelectedRecordsIEnumerable<TableRecord>
Registros atualmente selecionados na grade. Bindável bidirecional com FileGrid.SelectedRecordsChanged.
SelectFromEntireRowbool
True
Se clicar em qualquer lugar da fila é selecionado. Encaminhado para FluentGridBase.SelectFromEntireRow.
SelectModeDataGridSelectMode
Multiple
Modo de seleção de linha. O padrão é multi-seleção, então o download em massa funciona logo de cara. Encaminhado para FluentGridBase.SelectMode.
TableName*string
Nome lógico da tabela mostrado na grade. Encaminhado para o arquivo embrulhado Components.MainGrid.
Titlestring?
Texto opcional do cabeçalho encaminhado para a grade.
TransformViewAsyncFunc<GridViewDefinition, Task<GridViewDefinition>>?
Gancho opcional para transformar a visão ativa. Aplicado após o embutido Injeção de colunas de arquivo, para que os chamadores possam sobrepor ajustes adicionais de visualização sem Perdendo a garantia da coluna de arquivo. Assíncrono para que os chamantes possam consultar serviços enquanto Decidindo como moldar a visão.
ViewIdsIEnumerable<Guid>?
Lista opcional de IDs de visualização, encaminhada para GridBase.ViewIds.
ViewSortViewSort
NameAscending
Ordene a ordem do menu suspenso da visualização. Encaminhado para GridBase.ViewSort.
Nome: AllowChangingPageSize
Tipo: bool
Padrão: True
Descrição: Se o usuário pode alterar o tamanho da página via menu suspenso de paginação. Encaminhado para FluentGridBase.AlpermitMudandoTamanhoPágina.
Nome: AllowDownloadAll
Tipo: bool
Padrão: True
Descrição: Se o botão 'Download All' da barra de ferramentas está renderizado. O padrão é verdadeiro. Cenário para falsar em grades somente leitura ou orientadas a exibição onde a exportação em massa não é Apropriado — o ícone de download por linha ainda funciona quando FileGrid.AllowDownloadForFileColumns está ativado.
Nome: AllowDownloadForFileColumns
Tipo: bool
Padrão: True
Descrição: Se células de colunas de arquivo e imagem renderizam um ícone de download por linha no final Edge. O padrão é verdadeiro. Encaminhado para FluentGridBase.AllowDownloadForFileColumns.
Nome: AllowedExtensions
Tipo: IReadOnlyCollection<string>?
Descrição: Lista opcional de extensão (com ou sem o ponto inicial, indistinto a maiúsculas). Quando ativados, arquivos cuja extensão não está na lista são rejeitados antes do upload. Quando nulo, qualquer extensão é aceita.
Nome: AllowPreviewForFileColumns
Tipo: bool
Padrão: True
Descrição: Se células de colunas de arquivo e imagem renderizam um ícone de pré-visualização por linha no final Edge. O padrão é verdadeiro. Encaminhado para FluentGridBase.AllowPreviewForFileColumns.
Nome: AllowSearch
Tipo: bool
Padrão: True
Descrição: Se deve renderizar a caixa de busca em grade. Encaminhado para GridBase.AllowSearch.
Nome: AutoAddFileColumnIfMissingFromView
Tipo: bool
Padrão: True
Descrição: Se a grade se adiciona FileGrid.FileColumn automaticamente à visualização ativa quando a visualização ainda não inclui isso. O padrão é verdadeiro , então os dados do arquivo ficam visíveis não importa que a visão é escolhida pelo usuário. Defina como false para que a visão seja a única fonte de Verdade para colunas renderizadas — útil quando uma visualização mostra deliberadamente apenas metadados (nome, upload-on, etc.) sem a célula do arquivo.
Nome: BorderVisible
Tipo: bool
Padrão: True
Descrição: Se a grade desenha sua borda temática. Encaminhado para FluentGradeBase.BordaVisível.
Nome: Buttons
Tipo: RenderFragment?
Descrição: Botões opcionais de grade fornecidos pelo chamador (renderizados junto com os botões de arquivo embutidos).
Nome: CustomViewDefinitions
Tipo: List<GridViewDefinition>?
Descrição: Definições de visualização personalizadas (FetchXML inline), encaminhadas para GridBase.CustomViewDefinitions.
Nome: DefaultItemsPerPage
Tipo: int
Padrão: 50
Descrição: Tamanho padrão da página. Encaminhado para GridBase.DefaultItemsPerPage.
Nome: DefaultViewId
Tipo: Guid?
Descrição: ID de visualização padrão opcional, encaminhado para GridBase.DefaultViewId.
Nome: FileColumn*
Tipo: string
Descrição: O nome lógico da coluna do arquivo nesta FileGrid.TableName grade gerencia. Obrigatório porque um registro pode expor várias colunas de arquivo; A rede precisa saber Qual deles é direcionado para as ações de carregar/baixar/pré-visualizar.
Nome: FullSize
Tipo: bool
Padrão: False
Descrição: Se a grade ocupa toda a altura do seu contêiner. Encaminhado para FluentGridBase.FullSize.
Nome: HidePaging
Tipo: bool
Padrão: False
Descrição: Oculte completamente os controles de paginação. Encaminhado para GridBase.HidePaging.
Nome: IncludeSearchInPersistedState
Tipo: bool
Padrão: False
Descrição: Se deve incluir o texto da busca ativa na URL de estado persistida. Encaminhado para GridBase.IncludeSearchInPersistedState.
Nome: MaxFileSizeBytes
Tipo: long
Padrão: 134217728
Descrição: Limite superior em um único upload, em bytes. Arquivos maiores que isso são rejeitados do lado do cliente com um diálogo. Padrão é 128MB — o limite documentado do Dataverse para colunas de arquivos.
Nome: MaxHeight
Tipo: string?
Descrição: Altura máxima que o corpo da grade deve expandir. Encaminhado para GridBase.MaxHeight.
Nome: MinHeight
Tipo: string?
Descrição: Altura mínima que o corpo da grade deve ocupar. Encaminhado para GridBase.MinHeight.
Nome: OnUploadRecordAsync
Tipo: Func<string, byte[], Task<TableRecord>>?
Descrição: Personaliza o registro criado para cada arquivo enviado. Quando definido, a grade aguarda o delege com o nome do arquivo e bytes e usa o retorno Models.TableRecord como o registro a ser criado (que deve ter a coluna do arquivo preenchida). Quando nulo, a grade cria um registro mínimo com apenas a coluna do arquivo preenchida. Assíncrono, Os chamadores podem buscar defaults, resolver consultas ou acessar outros serviços antes de retornar O recorde.
Nome: PageSizes
Tipo: IEnumerable<int>
Descrição: As opções de tamanho de página são mostradas no menu suspenso de tamanho da página da grade. Encaminhado para GridBase.PageSizes.
Nome: PagingMode
Tipo: GridPagingMode
Padrão: Paged
Descrição: Modo de paginação. Encaminhado para FluentGridBase.PagingMode.
Nome: PersistedStateQueryParameter
Tipo: string?
Descrição: Nome do parâmetro da consulta URL que persiste o estado interativo da grade. Encaminhado para GridBase.PersistedStateQueryParameter.
Nome: SelectedRecords
Tipo: IEnumerable<TableRecord>
Descrição: Registros atualmente selecionados na grade. Bindável bidirecional com FileGrid.SelectedRecordsChanged.
Nome: SelectFromEntireRow
Tipo: bool
Padrão: True
Descrição: Se clicar em qualquer lugar da fila é selecionado. Encaminhado para FluentGridBase.SelectFromEntireRow.
Nome: SelectMode
Tipo: DataGridSelectMode
Padrão: Multiple
Descrição: Modo de seleção de linha. O padrão é multi-seleção, então o download em massa funciona logo de cara. Encaminhado para FluentGridBase.SelectMode.
Nome: TableName*
Tipo: string
Descrição: Nome lógico da tabela mostrado na grade. Encaminhado para o arquivo embrulhado Components.MainGrid.
Nome: Title
Tipo: string?
Descrição: Texto opcional do cabeçalho encaminhado para a grade.
Nome: TransformViewAsync
Tipo: Func<GridViewDefinition, Task<GridViewDefinition>>?
Descrição: Gancho opcional para transformar a visão ativa. Aplicado após o embutido Injeção de colunas de arquivo, para que os chamadores possam sobrepor ajustes adicionais de visualização sem Perdendo a garantia da coluna de arquivo. Assíncrono para que os chamantes possam consultar serviços enquanto Decidindo como moldar a visão.
Nome: ViewIds
Tipo: IEnumerable<Guid>?
Descrição: Lista opcional de IDs de visualização, encaminhada para GridBase.ViewIds.
Nome: ViewSort
Tipo: ViewSort
Padrão: NameAscending
Descrição: Ordene a ordem do menu suspenso da visualização. Encaminhado para GridBase.ViewSort.

Eventos

Nome
Tipo
Descrição
SelectedRecordsChangedEventCallback<IEnumerable<TableRecord>>
Dispara quando o conjunto de recordes selecionado muda.
Nome: SelectedRecordsChanged
Tipo: EventCallback<IEnumerable<TableRecord>>
Descrição: Dispara quando o conjunto de recordes selecionado muda.