Usuário com melhor resposta
Estruturar Informações

Pergunta
-
Tenho o código baixo onde faço a leitura de um xml e percorro ele ele ta me trazendo toda a informação
Código
public void CarregarXML() { XDocument doc = XDocument.Load((CaminhoDadosXML(caminho) + @"Dados\120716.xml")); Leitura leitura = FromXmlString(doc.ToString()); var silos = leitura.silos.Silo.ToList(); //selecionando todos os silos foreach (var p in silos)//Percorre os silos { var pendulos = p.pendulos.Pendulo.ToList(); //selecionando todos os pendulos de cada silo foreach (var item in pendulos)//Percorre os pendulos de cada silo { var pendulosS = item.S;// Obtendo todos os "S" foreach (var s in pendulosS)//Percorrendo os "S" { Console.WriteLine(string.Format("Silo: {0}\tData: {1}\tHora: {2}\tID_P: {3}, S: {4}", p.ID, p.data, p.hora, item.ID_P, s)); } } } }
XML:
<?xml version="1.0" encoding="utf-16"?> <Leitura xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <silos> <Silo> <ID>1</ID> <data>120716</data> <hora>0931</hora> <umidade>061</umidade> <temperatura>21</temperatura> <pendulos> <Pendulo> <ID_P>001</ID_P> <S>27</S> <S>27</S> <S>27</S> <S>27</S> <S>27</S> <S>27</S> <S>27</S> <S>25</S> <S>27</S> <S>27</S> <S>27</S> <S>25</S> <S>25</S> <S>25</S> <S>27</S> <S>27</S> <S /> </Pendulo> <Pendulo> <ID_P>002</ID_P> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>24</S> <S>24</S> <S>24</S> <S>25</S> <S>24</S> <S>24</S> <S>24</S> <S /> </Pendulo> <Pendulo> <ID_P>003</ID_P> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S /> </Pendulo> <Pendulo> <ID_P>004</ID_P> <S>23</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>23</S> <S>25</S> <S>23</S> <S>25</S> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>25</S> <S /> </Pendulo> <Pendulo> <ID_P>005</ID_P> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S /> </Pendulo> </pendulos> </Silo> <Silo> <ID>2</ID> <data>010716</data> <hora>1100</hora> <umidade>052</umidade> <temperatura>23</temperatura> <pendulos> <Pendulo> <ID_P>001</ID_P> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S /> </Pendulo> <Pendulo> <ID_P>002</ID_P> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>25</S> <S>25</S> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>25</S> <S>23</S> <S>25</S> <S /> </Pendulo> <Pendulo> <ID_P>003</ID_P> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S /> </Pendulo> <Pendulo> <ID_P>004</ID_P> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>23</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>23</S> <S>25</S> <S>23</S> <S>25</S> <S>25</S> <S>23</S> <S>25</S> <S /> </Pendulo> <Pendulo> <ID_P>005</ID_P> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>23</S> <S>25</S> <S>25</S> <S>25</S> <S /> </Pendulo> <Pendulo> <ID_P>006</ID_P> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S>25</S> <S /> </Pendulo> </pendulos> </Silo> <Silo> </silos> </Leitura>
eu gostaria de divir a informaçao por exemplo colocar um textbox onde se eu colocar 1 ele busca apenas as informações do silo de ID 1 e mostrar todas as informaçoes em labels hj ele so imprimi tudo no console.
Obrigado
Respostas
-
Bom dia,
Para buscar um silo pelo ID, você pode fazer assim:
var silo = leitura.silos.Silo.Where(x => x.ID.Equals(textBox1.Text)).FirstOrDefault();
Para carregar os "labels" basta você seguir a mesma lógica que fez para listar os dados. Exemplo:
//Dados do Silo var id = silo.ID; var temperarura = silo.temperatura; //etc //Dados dos Pendulos var pendulos = silo.pendulos.Pendulo; foreach (var p in pendulos) { //Id do Pendulo var id_p = p.ID_P; foreach (var s in p.S)//Percorres os "S" { //Dados dos "S" var sValue = s; } }
Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
Bom dia,
Bom saber que consegui ajudar.
Quanto aos sensores "S" por serem dinâmicos você pode criar dinamicamente os labels fazendo assim:
var silo = leitura.silos.Silo.Where(x => x.ID.Equals(textBox1.Text)).FirstOrDefault(); //Dados do Silo var id = silo.ID; var temperarura = silo.temperatura; //etc //Dados dos Pendulos var pendulos = silo.pendulos.Pendulo; Label label; int posicao = 10; foreach (var p in pendulos) { //Id do Pendulo var id_p = p.ID_P; label = new Label(); label.Text = string.Join(",", p.S); label.Location = new Point(0, posicao); this.Controls.Add(label); posicao += 25; }
Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
- Marcado como Resposta CLPSimens segunda-feira, 25 de julho de 2016 13:46
-
Altere a propriedade AutoSize do label para true:
Observe a linha: label.AutoSize = true;
var silos = leitura.silos.Silo.ToList(); //selecionando todos os silos textBox1.Text = "1"; var silo = leitura.silos.Silo.Where(x => x.ID.Equals(textBox1.Text)).FirstOrDefault(); //Dados do Silo var id = silo.ID; var temperarura = silo.temperatura; //etc //Dados dos Pendulos var pendulos = silo.pendulos.Pendulo; Label label; int posicao = 10; foreach (var p in pendulos) { //Id do Pendulo var id_p = p.ID_P; label = new Label(); label.Text = string.Join(",", p.S); label.Location = new Point(300, posicao); label.AutoSize = true; this.Controls.Add(label); posicao += 25; }
Att,Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
- Marcado como Resposta CLPSimens segunda-feira, 25 de julho de 2016 14:01
-
Bom dia,
Só lembrando que para mostrar da maneira que você está dizendo, você precisa especifica o pendulo. Já que cada silo possui "N" pendulos que por sua vez possui "N" sensores. Talvez seria interessante você trabalhar com o componente "TreeView". Mas como solicitado, segue o exemplo:
var silo = leitura.silos.Silo.Where(x => x.ID.Equals(textBox1.Text)).FirstOrDefault(); //Dados do Silo var id = silo.ID; var temperarura = silo.temperatura; //etc //Dados dos Pendulos var pendulos = silo.pendulos.Pendulo; int posicaoX = 200; Label label; foreach (var p in pendulos) { //Id do Pendulo var id_p = p.ID_P; int posicaoY = 10; label = new Label(); label.Text = string.Format("Pendulo ID {0}", p.ID_P); label.Location = new Point(posicaoX, posicaoY); this.Controls.Add(label); posicaoY += 40; int numeroSensor = 1; foreach (var s in p.S) { if (!string.IsNullOrEmpty(s)) { label = new Label(); label.Text = string.Format("Sensor {0} : {1}", numeroSensor, s); label.Location = new Point(posicaoX, posicaoY); label.AutoSize = true; this.Controls.Add(label); posicaoY += 20; numeroSensor++; } } posicaoX += 120; }
Se tiver interesse pelo treeView:
http://www.linhadecodigo.com.br/artigo/3081/componente-treeview-csharp.aspxAtt,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
Segue um exemplo ou sugestão de TreeView:
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
Bom dia,
Você diz a cor do Label ?
Dentro do laço que percorre os Sensores, pode fazer assim:
foreach (var s in p.S) { if (!string.IsNullOrEmpty(s)) { label = new Label(); label.Text = string.Format("Sensor {0} : {1}", numeroSensor, s); label.Location = new Point(posicaoX, posicaoY); label.AutoSize = true; if(Convert.ToInt32(s) > 27) label.ForeColor = System.Drawing.Color.Red; this.Controls.Add(label); posicaoY += 20; numeroSensor++; } }
Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
- Marcado como Resposta Robson William SilvaModerator quarta-feira, 27 de julho de 2016 12:29
Todas as Respostas
-
-
Bom dia,
Para buscar um silo pelo ID, você pode fazer assim:
var silo = leitura.silos.Silo.Where(x => x.ID.Equals(textBox1.Text)).FirstOrDefault();
Para carregar os "labels" basta você seguir a mesma lógica que fez para listar os dados. Exemplo:
//Dados do Silo var id = silo.ID; var temperarura = silo.temperatura; //etc //Dados dos Pendulos var pendulos = silo.pendulos.Pendulo; foreach (var p in pendulos) { //Id do Pendulo var id_p = p.ID_P; foreach (var s in p.S)//Percorres os "S" { //Dados dos "S" var sValue = s; } }
Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
-
Bom dia,
Bom saber que consegui ajudar.
Quanto aos sensores "S" por serem dinâmicos você pode criar dinamicamente os labels fazendo assim:
var silo = leitura.silos.Silo.Where(x => x.ID.Equals(textBox1.Text)).FirstOrDefault(); //Dados do Silo var id = silo.ID; var temperarura = silo.temperatura; //etc //Dados dos Pendulos var pendulos = silo.pendulos.Pendulo; Label label; int posicao = 10; foreach (var p in pendulos) { //Id do Pendulo var id_p = p.ID_P; label = new Label(); label.Text = string.Join(",", p.S); label.Location = new Point(0, posicao); this.Controls.Add(label); posicao += 25; }
Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
- Marcado como Resposta CLPSimens segunda-feira, 25 de julho de 2016 13:46
-
-
Altere a propriedade AutoSize do label para true:
Observe a linha: label.AutoSize = true;
var silos = leitura.silos.Silo.ToList(); //selecionando todos os silos textBox1.Text = "1"; var silo = leitura.silos.Silo.Where(x => x.ID.Equals(textBox1.Text)).FirstOrDefault(); //Dados do Silo var id = silo.ID; var temperarura = silo.temperatura; //etc //Dados dos Pendulos var pendulos = silo.pendulos.Pendulo; Label label; int posicao = 10; foreach (var p in pendulos) { //Id do Pendulo var id_p = p.ID_P; label = new Label(); label.Text = string.Join(",", p.S); label.Location = new Point(300, posicao); label.AutoSize = true; this.Controls.Add(label); posicao += 25; }
Att,Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
- Marcado como Resposta CLPSimens segunda-feira, 25 de julho de 2016 14:01
-
-
Não entendi....
Se for a posição de cada label na tela, é possível sim.
A posição pode ser alterada facilmente "new Point(300, 10);" ou seja posição x e y.
Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
-
Bom dia,
Só lembrando que para mostrar da maneira que você está dizendo, você precisa especifica o pendulo. Já que cada silo possui "N" pendulos que por sua vez possui "N" sensores. Talvez seria interessante você trabalhar com o componente "TreeView". Mas como solicitado, segue o exemplo:
var silo = leitura.silos.Silo.Where(x => x.ID.Equals(textBox1.Text)).FirstOrDefault(); //Dados do Silo var id = silo.ID; var temperarura = silo.temperatura; //etc //Dados dos Pendulos var pendulos = silo.pendulos.Pendulo; int posicaoX = 200; Label label; foreach (var p in pendulos) { //Id do Pendulo var id_p = p.ID_P; int posicaoY = 10; label = new Label(); label.Text = string.Format("Pendulo ID {0}", p.ID_P); label.Location = new Point(posicaoX, posicaoY); this.Controls.Add(label); posicaoY += 40; int numeroSensor = 1; foreach (var s in p.S) { if (!string.IsNullOrEmpty(s)) { label = new Label(); label.Text = string.Format("Sensor {0} : {1}", numeroSensor, s); label.Location = new Point(posicaoX, posicaoY); label.AutoSize = true; this.Controls.Add(label); posicaoY += 20; numeroSensor++; } } posicaoX += 120; }
Se tiver interesse pelo treeView:
http://www.linhadecodigo.com.br/artigo/3081/componente-treeview-csharp.aspxAtt,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
Segue um exemplo ou sugestão de TreeView:
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
-
-
-
resolveu sim Silvaney obrigado pela paciência , só preciso saber como faço para usar essas informações igual te falei por exemplo o sensor 8 ta com 35 entao eu vo colocar uma img de cor vermelha tem como eu trabalhar condições desses valor um por um ?
-
Bom dia,
Você diz a cor do Label ?
Dentro do laço que percorre os Sensores, pode fazer assim:
foreach (var s in p.S) { if (!string.IsNullOrEmpty(s)) { label = new Label(); label.Text = string.Format("Sensor {0} : {1}", numeroSensor, s); label.Location = new Point(posicaoX, posicaoY); label.AutoSize = true; if(Convert.ToInt32(s) > 27) label.ForeColor = System.Drawing.Color.Red; this.Controls.Add(label); posicaoY += 20; numeroSensor++; } }
Att,
Se a resposta contribuiu com seu aprendizado por favor marque como util, se solucionou seu problema marque como resposta.
- Marcado como Resposta Robson William SilvaModerator quarta-feira, 27 de julho de 2016 12:29