none
Alterando dados de uma datatable RRS feed

  • Pergunta

  • Tenho uma datatable e tenho 2 selects onde preciso preencher um datatable

    DataTable dt2 = new DataTable();
    dt2.Columns.Add("veiculo", typeof(string));
    dt2.Columns.Add("ap1", typeof(string));
    dt2.Columns.Add("ap2", typeof(string));
    dt2.Columns.Add("ap3", typeof(string));
    dt2.Columns.Add("op1", typeof(string));
    dt2.Columns.Add("op2", typeof(string));
    dt2.Columns.Add("op3", typeof(string));

    Na primeira consulta percorri o result e já preenchi o veiculo, ap1,ap2,ap3.

    Na segunda consulta tenho o veiculo e preciso colocar os dados do op1,op2,op3



    Junior

    sexta-feira, 13 de julho de 2018 14:06

Respostas

  • Tente assim:

    foreach (DataRow dt in ds1.Tables["dados1"].Rows)
    {
      veiculo = dt["veiculo"].ToString();
      OP1 = "X";
      OP2 = "OK";
    
     dt2.Rows.Cast<DataRow>().Where(i => i["veiculo"].ToString() == veiculo).ToList().ForEach(i => {
         i["op1"] = OP1;
         i["op2"] = OP2;
     });
    }

    Mas o seu código também deveria funcionar. Outra coisa: as informações de OP1 e OP2 não devem ser obtidas da dt também? Espero que ajude. Bom trabalho!

    • Marcado como Resposta Junior_luiz segunda-feira, 16 de julho de 2018 13:38
    sexta-feira, 13 de julho de 2018 21:10

Todas as Respostas

  • Olá, Junior!

        Segue abaixo um exemplo, com Linq:

                DataTable dt1 = new DataTable();
                dt1.Columns.Add("veiculo", typeof(string));
                dt1.Columns.Add("op1", typeof(string));
                dt1.Columns.Add("op2", typeof(string));
                dt1.Columns.Add("op3", typeof(string));
    
                DataRow row1 = dt1.NewRow();
                row1["veiculo"] = "YXZ8545";
                row1["op1"] = "M";
                row1["op2"] = "N";
                row1["op3"] = "O";
                dt1.Rows.Add(row1);
    
                DataRow row2 = dt1.NewRow();
                row2["veiculo"] = "DKM9764";
                row2["op1"] = "P";
                row2["op2"] = "Q";
                row2["op3"] = "R";
                dt1.Rows.Add(row2);
    
                DataTable dt2 = new DataTable();
                dt2.Columns.Add("veiculo", typeof(string));
                dt2.Columns.Add("ap1", typeof(string));
                dt2.Columns.Add("ap2", typeof(string));
                dt2.Columns.Add("ap3", typeof(string));
                dt2.Columns.Add("op1", typeof(string));
                dt2.Columns.Add("op2", typeof(string));
                dt2.Columns.Add("op3", typeof(string));
    
                DataRow row3 = dt2.NewRow();
                row3["veiculo"] = "YXZ8545";
                row3["ap1"] = "A";
                row3["ap2"] = "B";
                row3["ap3"] = "C";
                dt2.Rows.Add(row3);
    
                DataRow row4 = dt2.NewRow();
                row4["veiculo"] = "DKM9764";
                row4["ap1"] = "D";
                row4["ap2"] = "E";
                row4["ap3"] = "F";
                dt2.Rows.Add(row4);
    
                dt2.Rows.Cast<DataRow>().ToList().ForEach(i =>
                {
                    DataRow row = dt1.Rows.Cast<DataRow>().Where(r => r["veiculo"] == i["veiculo"]).FirstOrDefault();
                    if (row != null)
                    {
                        i["op1"] = row["op1"];
                        i["op2"] = row["op2"];
                        i["op3"] = row["op3"];
                    }
                });
    Bom trabalho!

    sexta-feira, 13 de julho de 2018 16:26
  • Rodrigo não é bem assim que eu tenho. Só tenho uma datatable que no seu exemplo é a dt2.

    Já tenho gravado assim :

    veiculo | ap1 | ap2 | op1 | op2

    123          1      2

    124          2      1

    A dt2 já está com esses valores, agora preciso preencher as colunas op1 e op2

    os valores que tenho são : veiculo = 123 op1 = a op2 = b , veiculo = 124 op1 = B op2 = c

    Preciso localizar na DT2 o carro e gravar as colunas op1 e op2 


    Junior

    sexta-feira, 13 de julho de 2018 17:01
  • Rodrigo não é bem assim que eu tenho. Só tenho uma datatable que no seu exemplo é a dt2.

    Já tenho gravado assim :

    veiculo | ap1 | ap2 | op1 | op2

    123          1      2

    124          2      1

    A dt2 já está com esses valores, agora preciso preencher as colunas op1 e op2

    os valores que tenho são : veiculo = 123 op1 = a op2 = b , veiculo = 124 op1 = B op2 = c

    Preciso localizar na DT2 o carro e gravar as colunas op1 e op2 


    Junior

    Junior, criei o objeto dt1 somente para efeitos de testes. Ela seria equivalente a fonte de dados - coleção - que você disse que possui as informações das colunas op. Coloque este código em uma rotina qualquer, e execute o código exatamente como enviei, debugando, para entender como o exemplo funciona, e vá conferindo como fica a dt2. Ela ficará com as informações completas. Provavelmente você terá de adaptar este exemplo no seu código. Se precisar de ajuda nesta adaptação, envie esta parte do seu código para conferirmos, e assim montar um exemplo mais acertado.
    sexta-feira, 13 de julho de 2018 17:22
  • Estou fazendo assim

    foreach (DataRow dt in ds1.Tables["dados1"].Rows)
    {
      veiculo = dt["veiculo"].ToString();
      OP1 = "X";
      OP2 = "OK";
      foreach (DataRow dtr in dt2.Rows)
      {
        if (dtr["Veiculo"].ToString() == veiculo)
        {
          dtr["op1"] = OP1;
          dtr["op2"] = OP2;
        }
      }
    
    O primeiro foreach é da minha consulta com o banco.


    Junior

    sexta-feira, 13 de julho de 2018 19:36
  • Tente assim:

    foreach (DataRow dt in ds1.Tables["dados1"].Rows)
    {
      veiculo = dt["veiculo"].ToString();
      OP1 = "X";
      OP2 = "OK";
    
     dt2.Rows.Cast<DataRow>().Where(i => i["veiculo"].ToString() == veiculo).ToList().ForEach(i => {
         i["op1"] = OP1;
         i["op2"] = OP2;
     });
    }

    Mas o seu código também deveria funcionar. Outra coisa: as informações de OP1 e OP2 não devem ser obtidas da dt também? Espero que ajude. Bom trabalho!

    • Marcado como Resposta Junior_luiz segunda-feira, 16 de julho de 2018 13:38
    sexta-feira, 13 de julho de 2018 21:10
  • Obrigado Rodrigo pela ajuda.

    Junior

    segunda-feira, 16 de julho de 2018 13:38