none
Adicionar dados em colunas de um datagridview em C# RRS feed

  • Pergunta

  • Blz amigos!!

    Estou com uma dúvida sobre uma forma em particular de preencher um datagridview, estou querendo inserir célula por célula através da função: datagridview.Rows[h].Cells[i].Value = dado; porém para fazer desta forma, a opção enable adding precisa estar habilitada, e eu não gostaria de habilitá-la. tem alguma outra forma?

    Desde já agradeço.

    segunda-feira, 6 de abril de 2015 03:45

Todas as Respostas

  • Eu geralmente faço independente de estar habilitado ou não essa opção, através de DataTable, você vai adicionar dado a dado em tempo de execução ou vai carregar todos os dados de uma única vez?


    Se for para carregar uma única vez pose ser dessa forma:

    //Crio o dataTable
    DataTable dt = new DataTable();
    
    //Crio as colunas
    dt.Columns.Add("COLUNA1");
    dt.Columns.Add("COLUNA2");
    dt.Columns.Add("COLUNA3");
    dt.Columns.Add("COLUNA4");
    dt.Columns.Add("COLUNA5");
    
    DataRow row = dt.NewRow();
    row[0] = "Primeiro Valor";
    
    //Adiciona o conteudo da Linha
    dt.Rows.Add(row);
    
    //Carrega a grid com os valores
    dataGridView1.DataSource = dt.DefaultView;
    
    
    


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    segunda-feira, 6 de abril de 2015 11:56
  • segunda-feira, 6 de abril de 2015 12:16
  • Marcio, obrigado pelas dicas, mas estas formas aí são as que eu sempre faço, mas elas não estão resolvendo o meu caso.

    Mr. GMSOFT, esta sua dica quase resolveu, o problema é meu datagrid já possui as colunas, eu só tenho que populá-las, e no exemplo que vc deu ele está criando outras colunas na frente das que já tem, sabe me dizer como faço com este exemplo seu sem que crie novas colunas?

    Eu coloquei sem a adição das colunas, desta forma:

    DataRow row = dt.NewRow();
    row[linha] = batida;
    //Adiciona o conteudo da Linha
    dt.Rows.Add(row);
    


                        linha++;

    mas está dando erro no índice da row, diz que não encontrou o índice 0.

    segunda-feira, 6 de abril de 2015 17:28
  • Vinicius, 

    Não sei se é o mesmo problema. Mas as vezes me deparo com esses erros de indice quando expirou a sessão no navegador. Aí preciso fazer o login novamente.


    Att, Arthur Augusto

    segunda-feira, 6 de abril de 2015 17:40
  • Se for dentro de um loop tem que ser dessa forma:

    for (int linha=0;linha<totalLinhas;linha++)
    {
    row = dt.NewRow();
    row[linha] = batida;
    dt.Rows.Add(row);
    }


    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    segunda-feira, 6 de abril de 2015 18:22
  • Então, está dentro de um loop mesmo, só que já dá erro logo de cara no índice 0 (não é possível encontrar a coluna 0)

    segunda-feira, 6 de abril de 2015 19:33
  • testou o codigo que postei?

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    terça-feira, 7 de abril de 2015 19:15
  • Sim, testei. 

    Deixa eu explicar melhor o que estou fazendo, de repente alguém tenha uma engenharia que possa funcionar melhor.

    Eu tenho uma tabela no banco de dados com os seguintes dados:

    MAR_ID PES_ID MAR_DATAHORA MAR_MAN_EQ
    1 1 05/04/2015 08:10:00 E
    2 1 05/04/2015 11:14:00 E
    3 1 05/04/2015 13:05:00 E
    4 1 05/04/2015 18:10:00 E
    5 1 06/04/2015 08:01:00 E
    6 1 06/04/2015 12:06:00 E
    7 1 06/04/2015 14:00:00 E
    8 1 06/04/2015 19:08:00 E

    E eu preciso lançar isto em um datagridview da seguinte forma:

    DATA       E1      S1         E2         S2      E3      S3     E4    S4

    05/04   08:10  11:14   13:05   18:10

    06/04  08:01   12:06   14:00   19:08

    Como eu pensei em fazer (até fiz, mas não deu certo ainda):

    em um loop eu pego todos os registros referentes a um dia na tabela selecionando e reordenando um ao lado do outro:

    string[] dados=new string[4];
    int index=0;
    while (reader.Read())
    {
        DateTime k = Convert.ToDateTime(reader.GetValue(0));
        if (index == 0)
        {
            dados[index] = k.ToString("dd/mm");
            index++;
            dados[index] = k.ToString("HH:mm");
            index++;
        }
        else
        {
            dados[index] = k.ToString("HH:mm");
            index++;
        }
    }
     

    Desta forma acima está dando parcialmente certo, está dando uns erros de índices, mas tirando eles o resultado é quase o esperado. 

    Agora vou ver o que faço pra corrigir os erros de índices e ver no que vai dar.


    terça-feira, 7 de abril de 2015 21:32
  • Caso tenha conseguido a solução finalize sua Thread marcando a resposta

    GTSA vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel

    domingo, 28 de junho de 2015 14:10