Exportando WPF DataGrid para um arquivo de texto em um formato bonito. O arquivo de texto deve ser fácil de ler

StackOverflow https://stackoverflow.com/questions/3049887

Pergunta

Existe uma maneira simples de exportar um datagrid WPF para um arquivo de texto e um arquivo .csv? Eu fiz algumas pesquisas e não consigo ver que existe um método simples do DataGrid para isso. Eu tenho algo funcionando (mal) fazendo o uso do itemsSource do datagrid. No meu caso, esta é uma variedade de estruturas. Faço algo com gravadores de stream e stringbuilders (detalhes disponíveis) e basicamente tenho:

StringBuilder destination = new StringBuilder();
destination.Append(row.CreationDate);
destination.Append(seperator);  // seperator is '\t' or ',' for csv file
destination.Append(row.ProcId);
destination.Append(seperator);
destination.Append(row.PartNumber);
destination.Append(seperator);

Eu faço isso para cada estrutura na matriz (em um loop). Isso funciona bem. O problema é que não é fácil ler o arquivo de texto. Os dados podem ter diferentes comprimentos na mesma coluna. Eu gostaria de ver algo como: 2007-03-03 234238423823 823829923 2007-03-03 66 99 E, claro, eu recebo algo como: 2007-03-03 234238423823 823829923 2007-03-03

Não é de surpreender que eu esteja usando delimitadores de guias, mas espero fazer melhor. Certamente é fácil de ler no DataGrid! É claro que eu poderia ter alguma lógica para fazer valores curtos com espaços, mas isso parece bastante confuso. Eu pensei que poderia haver uma maneira melhor. Também sinto que esse é um problema comum e que provavelmente já foi resolvido antes (espero que dentro das próprias classes .NET).

Obrigado.

Foi útil?

Solução

Suponho que o objetivo é ser o mais wysiwyg possível. Nesse caso eu faria:

  1. Faça um loop através de todos os datagridrows e para cada um, construa uma string [] contendo os dados exibidos em cada DataGridCell. Isso é fácil para a maioria dos tipos de DataGridColumn. Para DataGridTemplateColumn, você precisará usar a ligação e converter .ToString ().
  2. Eu também acompanhava o comprimento máximo da corda em cada coluna ao fazer isso.

A próxima etapa depende do tipo de exportação:

  • Para uma exportação de CSV, eu anexaria todas as cordas em cada string [] citações internas com vírgulas entre elas e as escrevi.
  • Para uma exportação de texto simples, eu anexaria todas as cordas em cada string [] acolchoado com espaços para 1+ o comprimento máximo da corda para essa coluna e escrevê -las.

O motivo para usar os objetos reais do DataGridRow, DataGridCell e DatagridColumn é escrever exatamente o que o usuário final vê. Por exemplo, você pode pular colunas ocultas, aplicar formatos de string em ligação, filtragem/agrupamento/classificação de honra, etc.

Outras dicas

Eu usaria a funcionalidade Application.Copy da grade, selecionaria tudo e copia no código e você pode analisar os dados do auxiliar de porta de transferência que estão no CSV, HTML e em alguns outros formatos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top