none
Ajuda a configurar esse datagrid RRS feed

  • Pergunta

  • Olá pessoa, boa tarde.

    Pessoal, preciso verificar se o total de colunas de um arquivo CSV é o mesmo do q está gravado no banco de dados.

    Os nomes das colunas tem q ser exatamente iguais.

    Se for, o programa deve configurar um datagrid (colunas do tipo hyperlink e text)

    Os links devem aceitar click e abrir a página no navegador padrão

    Eu consigo fazer as comparações dos dados, adicionar as colunas no datagrid, mas não sei adicionar as linhas...

    Eu nao sei quantos dados tem nas linhas, por exemplo, na linha 1 pode ser preenchida até a terceira coluna, na linha 2 pode ser preenchida até a 10 coluna... por isso eu não posso usar aquele recurso dataitem {nomecoluna1 = "valor", nomecoluna2="valor2"...}...

    Todo o código q eu já fiz vou postar abaixo:

    string caminhoDoCSV;
            DataGrid DG;
            List<string> nomeDasColunasNoBanco;
            List<string> tiposDasColunasNoBanco;
            public Grid(string CaminhoDoArquivoCSV, DataGrid datagrid)
            {
                DG = datagrid;
                DG.AutoGenerateColumns = false;
                DG.Columns.Clear();
                caminhoDoCSV = CaminhoDoArquivoCSV;
                //Vamos trazer todos os registros de templates do BD
                using (smcdbEntities db = new smcdbEntities())
                {
                    var dados = (from c in db.Coluna
                                 select new
                                 {
                                     c.Template.Nome_Template,
                                     c.Nome_Coluna,
                                     c.Tipo
                                 }).ToList();
    
                    //precisamos ver agora seo o CSV informado possui o mesmo nuero de colunas
                    //de algum registro no banco de dados
                    //Vamos primeiro pegar as colunas do CSV
                    List<String> colunas = pegarColunas(CaminhoDoArquivoCSV);
    
                    //Agora vamos comparar se tem algum registro no banco de dados
                    //com o mesmo número de colunas
                    //Primeiro precisamos pegar os registros distinto de templates
                    var templatesDistintos = dados.GroupBy(t => t.Nome_Template).Select(g => g.First()).ToList();
    
                    //Agora vamos usar um loop para pesquisar os valores dentro de cada template
                    bool colunasIguais = true;
                    for (int i = 0; i < templatesDistintos.Count(); i++)
                    {
                        //Total de colunas do template do banco...
                        nomeDasColunasNoBanco = (from c in dados
                                                     where c.Nome_Template == templatesDistintos[i].Nome_Template
                                                     select c.Nome_Coluna).ToList();
    
                        //Se o nº de colunas do CSV não for igual ao nº de colunas do template no banco...
                        if (colunas.Count != nomeDasColunasNoBanco.Count)
                            {//...vai para a próxima iteração
                                colunasIguais = false;
                                continue;
                            }
                        //caso contrário...
                        else
                        {
                            //...vemos se os nomes das colunas do CSV e do banco são exatamente iguais
                            if (colunas.Intersect(nomeDasColunasNoBanco).Count() != colunas.Count())
                            {
                                colunasIguais = false;
                            }
                            else
                            {
                                colunasIguais = true;
                                tiposDasColunasNoBanco = (from c in dados
                                                     where c.Nome_Template == templatesDistintos[i].Nome_Template
                                                     select c.Tipo).ToList();
                                //string abc = colunasFormatadas[0{"tipo"}];
                                preencherDataGrid(nomeDasColunasNoBanco, tiposDasColunasNoBanco);
                                //Como a condição foi totalmente atendida, podemos sair de todo o procedimento
                                return;
                            }
                        }
                    }
    
                    if (!colunasIguais)
                    {
                        DG.ItemsSource = null;
                        MessageBox.Show("Nenhum template encontrado.");
                    }
                }
            }
    
            private void preencherDataGrid(List<string> nomeDasColunas, List<string> tipoDasColunas)
            {
                for (int i = 0; i < nomeDasColunas.Count; i++)
                {
                    if (tiposDasColunasNoBanco[i].Equals("T"))
                    {
                        DataGridTextColumn ct = new DataGridTextColumn() { Header = nomeDasColunas[i] };
                        DG.Columns.Add(ct);
                    }
    
                    if (tiposDasColunasNoBanco[i].Equals("N"))
                    {
                        DataGridTextColumn cn = new DataGridTextColumn() { Header = nomeDasColunas[i] };
                        DG.Columns.Add(cn);
                    }
    
                    if (tiposDasColunasNoBanco[i].Equals("L"))
                    {
                        DataGridHyperlinkColumn cl = new DataGridHyperlinkColumn() { Header = nomeDasColunas[i] };
                        DG.Columns.Add(cl);
                    }
                }
    
                //Como eu adiciono as linhas?
            }
    
            private List<String> pegarColunas(string pathCSV)
            {
                List<String> colunas = new List<string>();
                foreach (var fields in File.ReadAllLines(pathCSV)[0].Split('\t'))
                {
                    colunas.Add(fields);
                }
                return colunas;
            }
        }

    Eu tenho q entregar esse projeto daqui a 8 dias e to empacado aqui, alguém por favor poderia me ajudar?


    Se a resposta foi útil, por favor marque como útil. Leia a bíblia.

    quarta-feira, 20 de março de 2013 20:12

Respostas

  • Pessoal, consegui resolver passado um datatable e setando o itemssource do datagrid:

    private void preencherDataGrid(List<string> nomeDasColunas, List<string> tipoDasColunas, DataTable registros)
            {
                DataTable dt = registros;
                for (int i = 0; i < nomeDasColunas.Count; i++)
                {
                    if (tiposDasColunasNoBanco[i].Equals("T"))
                    {
                        DataGridTextColumn ct = new DataGridTextColumn() { Header = nomeDasColunas[i] };
                        ct.Binding = new Binding(nomeDasColunas[i]);
                        DG.Columns.Add(ct);
                    }
    
                    if (tiposDasColunasNoBanco[i].Equals("N"))
                    {
                        DataGridTextColumn cn = new DataGridTextColumn() { Header = nomeDasColunas[i] };
                        cn.Binding = new Binding(nomeDasColunas[i]);
                        DG.Columns.Add(cn);
                    }
    
                    if (tiposDasColunasNoBanco[i].Equals("L"))
                    {
                        DataGridHyperlinkColumn cl = new DataGridHyperlinkColumn() { Header = nomeDasColunas[i] };
                        cl.Binding = new Binding(nomeDasColunas[i]);
                        DG.Columns.Add(cl);
                    }
                }
    
                DG.ItemsSource = dt.DefaultView;
                
            }

    :)


    Se a resposta foi útil, por favor marque como útil. Leia a bíblia.

    • Marcado como Resposta Tianodraco quinta-feira, 21 de março de 2013 13:35
    quinta-feira, 21 de março de 2013 13:34

Todas as Respostas

  • Pra adicionar as linhas tentei fazer assim:

    //Como eu adiciono as linhas?
                List<object> rows = new List<object>();
                string[] value;
    
                value = new string[7];
    
                value[0] = "http://www.uol.com.br";
                value[1] = "http://www.baixaki.com.br";
                value[2] = "http://www.camaratiangua.ce.gov.br";
                value[3] = "http://www.ig.com.br";
                value[4] = "http://www.r7.com.br";
                value[5] = "http://www.terra.com.br";
                value[6] = "http://www.verdadegospel.com";
                rows.Add(value);
    
                DG.ItemsSource = rows;

    Não causa erro, mas a linha aparece em branco....


    Se a resposta foi útil, por favor marque como útil. Leia a bíblia.

    quinta-feira, 21 de março de 2013 12:02
  • Pessoal, consegui resolver passado um datatable e setando o itemssource do datagrid:

    private void preencherDataGrid(List<string> nomeDasColunas, List<string> tipoDasColunas, DataTable registros)
            {
                DataTable dt = registros;
                for (int i = 0; i < nomeDasColunas.Count; i++)
                {
                    if (tiposDasColunasNoBanco[i].Equals("T"))
                    {
                        DataGridTextColumn ct = new DataGridTextColumn() { Header = nomeDasColunas[i] };
                        ct.Binding = new Binding(nomeDasColunas[i]);
                        DG.Columns.Add(ct);
                    }
    
                    if (tiposDasColunasNoBanco[i].Equals("N"))
                    {
                        DataGridTextColumn cn = new DataGridTextColumn() { Header = nomeDasColunas[i] };
                        cn.Binding = new Binding(nomeDasColunas[i]);
                        DG.Columns.Add(cn);
                    }
    
                    if (tiposDasColunasNoBanco[i].Equals("L"))
                    {
                        DataGridHyperlinkColumn cl = new DataGridHyperlinkColumn() { Header = nomeDasColunas[i] };
                        cl.Binding = new Binding(nomeDasColunas[i]);
                        DG.Columns.Add(cl);
                    }
                }
    
                DG.ItemsSource = dt.DefaultView;
                
            }

    :)


    Se a resposta foi útil, por favor marque como útil. Leia a bíblia.

    • Marcado como Resposta Tianodraco quinta-feira, 21 de março de 2013 13:35
    quinta-feira, 21 de março de 2013 13:34