Remova colunas de DataTable em C #


113

Eu tenho um DataSet do qual recebo uma DataTable que estou sendo passado de volta de uma chamada de função. Ele tem 15-20 colunas, no entanto, quero apenas 10 colunas de dados.

Existe uma maneira de remover aquelas colunas que eu não quero, copiar o DataTable para outro que tenha apenas as colunas definidas que eu quero ou é apenas melhor iterar a coleção e usar apenas as colunas que preciso.

Preciso gravar os valores em um arquivo de dados de comprimento fixo.


Não tenho nenhum controle sobre o conjunto de dados que recebo. A única coisa que sei é que contém tudo.
Brian G,

Respostas:


302

Além de limitar as colunas selecionadas para reduzir a largura de banda e a memória:

DataTable t;
t.Columns.Remove("columnName");
t.Columns.RemoveAt(columnIndex);

13
Só para esclarecer: Isso também funciona quando o DataTablejá tem linhas existentes, não apenas em um vazio DataTable.
Uwe Keim

23

Para remover todas as colunas após a desejada, o código abaixo deve funcionar. Ele será removido no índice 10 (lembre-se de que as colunas são baseadas em 0), até que a contagem de colunas seja 10 ou menos.

DataTable dt;
int desiredSize = 10;

while (dt.Columns.Count > desiredSize)
{
   dt.Columns.RemoveAt(desiredSize);
}

1
só meu 2c, não gosto dessa solução, trabalhar com índices de coluna leva a uma manutenção de pesadelo.
Roberto

1
a pergunta inclui a seguinte declaração: "..colunas definidas que eu quero .." então isso significa que as colunas necessárias não estão necessariamente em ordem sequencial, então não se pode simplesmente dizer "Eu preciso das primeiras 10 colunas". Como tal, a solução deve conter uma matriz de nomes de coluna que ele deseja, então podemos eliminar todas as outras que não caiam neste conjunto "definido" de nomes. Diferentes maneiras de implementar isso; do loop foreach simples para consulta ou linq usando IN.
Roberto

3

A pergunta já foi marcada como respondida, mas acho que a pergunta afirma que a pessoa deseja remover várias colunas de a DataTable.

Então, para isso, aqui está o que eu fiz, quando me deparei com o mesmo problema.

string[] ColumnsToBeDeleted = { "col1", "col2", "col3", "col4" };

foreach (string ColName in ColumnsToBeDeleted)
{
    if (dt.Columns.Contains(ColName))
        dt.Columns.Remove(ColName);
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.