Usuário com melhor resposta
Alterando dados de uma datatable

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
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
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!
-
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
-
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
-
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
-
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
-