DMaia Posted December 10, 2012 at 12:06 PM Report #486427 Posted December 10, 2012 at 12:06 PM Bom dia , Gostava que me dessem uma ajuda para criar uma datagridview dinamicamente. C# WindowsForms O Objectivo é fazer ping de uma lista de IP's ou HostName e caso success inseria na grid (host, data , e Imagem Vermelha ou Verde) consoante resposta. Tenho esta função que escreve na grid, mas tenho um problema caso 1 ping nao seja com sucesso ele mete todos os outros com redball. private void TabelaDinamimca(bool sucesso,string host, string data) { GridView1.ColumnCount = 3; GridView1.Columns[1].Name = "host"; GridView1.Columns[2].Name = "data"; DataGridViewImageColumn img = new DataGridViewImageColumn(); string path = (sucesso == true ? @"C:\TestFolder\greenBall.png" : @"C:\TestFolder\redBall.png"); Image image = Image.FromFile(path); img.Image = image; GridView1.Columns.Add(img); string[] row = new string[] { host, data }; GridView1.Rows.Add(row); GridView1.Show(); } Cumprimentos,
petvetbr Posted December 10, 2012 at 01:35 PM Report #486434 Posted December 10, 2012 at 01:35 PM Talvez o problema esteja na chamada deste método e não este método em si. Você já verificou se o valor passado no parâmetro sucesso na chamada desta função está de acordo com o que deveria ser. Pois você fala que após um ping falhar, todos ficam em vermelho, teria como colocar o código que chama este método aqui? Pois parece que o problema pode ser que após uma falha no ping, esta função está sempre sendo chamada com o parâmetro sucesso como false. Fernando Lage Bastos - MCP/MCTS/MCPD
DMaia Posted December 10, 2012 at 02:09 PM Author Report #486438 Posted December 10, 2012 at 02:09 PM Sim em debug ele passa a False o que dá erro, e os outros a True. é aqui que é chamada a função TabelaDinamica while ((s = sr.ReadLine()) != null) { PingReply Reply; byte[] Buffer = Encoding.ASCII.GetBytes(Data); TextboxWhen.Text = DateTime.Now.ToString(); try { TextboxHost.Text = s; TextboxHost.Show(); Reply = Sender.Send(TextboxHost.Text, Timeout, Buffer); } catch (Exception ex) { Sucesso = false; TextboxError.Text = "Erro ping: " + ex.Message; TextboxStatus.Text = "Falhou"; /* ********* GRAVAR LOG ********* */ Logs(TextboxHost.Text, TextboxStatus.Text, TextboxWhen.Text, TextboxError.Text); /* ********* GRID ********* */ TabelaDinamimca(Sucesso, count, s.ToString(), DateTime.Now.ToString()); return; } if (Reply.Status == IPStatus.Success) { SystemSounds.Asterisk.Play(); TextboxStatus.Text = (Reply.Options == null) ? "Sem Opções" : "Success"; TextboxError.Text = ""; Sucesso = true; /* ********* GRID ********* */ TabelaDinamimca(Sucesso,count,s.ToString(),DateTime.Now.ToString()); } else { TextboxError.Text = Reply.Status.ToString(); TextboxStatus.Text = "Falhou"; } } return;
petvetbr Posted December 10, 2012 at 06:38 PM Report #486473 Posted December 10, 2012 at 06:38 PM O problema pode estar nesta função de chamada mesmo. Não se deve usar exceções/try..catch para fazer uma árvore de decisão. Você deveria utilizar outro sistema, como uma flag usando um if ou outro mecanismo de verificação convencional. Try..catch deve somente ser usado para casos onde pode ocorrer um erro que você não tenha controle sobre ele. Neste caso é uma situação previsível (o ping não responder) e é melhor procurar uma forma mais convencional de fazer isto. Ao usar exceções para fazer isto, fica difícil saber exatamente o que acontece depois de ocorrer uma exceção, o código fica lento e se isto irá causar uma má impressão sobre quem for ler o seu código. Fernando Lage Bastos - MCP/MCTS/MCPD
DMaia Posted December 11, 2012 at 04:14 PM Author Report #486659 Posted December 11, 2012 at 04:14 PM Solução foi assim private void Ping() { bool Sucesso = false; int count=0; string path = @"XXXXXX.txt"; ListBoxArray.Items.Clear(); dataGridView1.ColumnCount = 5; //GridView1.Columns[index].Name = "Index"; dataGridView1.Columns[1].Name = "Host"; dataGridView1.Columns[2].Name = "Data"; dataGridView1.Columns[3].Name = "Tempo"; dataGridView1.Columns[4].Name = "Status"; DataGridViewImageColumn img = new DataGridViewImageColumn(); img.Name = "img"; img.HeaderText = "Sucess"; img.ValuesAreIcons = true; dataGridView1.Columns.Add(img); using (StreamReader sr = File.OpenText(path)) { string s = ""; while ((s = sr.ReadLine()) != null) { PingReply Reply; byte[] Buffer = Encoding.ASCII.GetBytes(Data); TextboxWhen.Text = DateTime.Now.ToString(); try { TextboxHost.Text = s; TextboxHost.Show(); count=count+1; Reply = Sender.Send(TextboxHost.Text, Timeout, Buffer); } catch (Exception ex) { Sucesso = false; TextboxError.Text = "Erro ping: " + ex.Message; TextboxStatus.Text = "Falhou"; /* ********* GRAVAR LOG ********* */ Logs(TextboxHost.Text, TextboxStatus.Text, TextboxWhen.Text, TextboxError.Text); count=count+1; TabelaDinamimcaSucess(Sucesso, count, s.ToString(), DateTime.Now.ToString(), "0", TextboxStatus.Text); return; } if (Reply.Status == IPStatus.BadDestination) { TextboxStatus.Text="Destino inválido"; TabelaDinamimcaSucess(Sucesso, count, s.ToString(), DateTime.Now.ToString(), Reply.RoundtripTime.ToString(), TextboxStatus.Text); } else if (Reply.Status == IPStatus.DestinationHostUnreachable) { TextboxStatus.Text="Destination Host Unreachable"; TabelaDinamimcaSucess(Sucesso, count, s.ToString(), DateTime.Now.ToString(), Reply.RoundtripTime.ToString(), TextboxStatus.Text); } else if (Reply.Status == IPStatus.TimedOut) { TextboxStatus.Text="TimedOut"; TabelaDinamimcaSucess(Sucesso, count, s.ToString(), DateTime.Now.ToString(), Reply.RoundtripTime.ToString(), TextboxStatus.Text); } else if (Reply.Status == IPStatus.TimeExceeded) { TextboxStatus.Text="TimeExceeded"; TabelaDinamimcaSucess(Sucesso, count, s.ToString(), DateTime.Now.ToString(), Reply.RoundtripTime.ToString(), TextboxStatus.Text); } else if (Reply.Status == IPStatus.Unknown) { TextboxStatus.Text = "Unknown"; TabelaDinamimcaSucess(Sucesso, count, s.ToString(), DateTime.Now.ToString(), Reply.RoundtripTime.ToString(), TextboxStatus.Text); } else if (Reply.Status == IPStatus.ParameterProblem) { TextboxStatus.Text = "ParameterProblem"; TabelaDinamimcaSucess(Sucesso, count, s.ToString(), DateTime.Now.ToString(), Reply.RoundtripTime.ToString(), TextboxStatus.Text); } else if (Reply.Status == IPStatus.TimedOut) { TextboxStatus.Text = "Destination Host Unreachable"; TabelaDinamimcaSucess(Sucesso, count, s.ToString(), DateTime.Now.ToString(), Reply.RoundtripTime.ToString(), TextboxStatus.Text); } else if (Reply.Status == IPStatus.TimedOut) { TextboxStatus.Text = "Destination Host Unreachable"; TabelaDinamimcaSucess(Sucesso, count, s.ToString(), DateTime.Now.ToString(), Reply.RoundtripTime.ToString(), TextboxStatus.Text); } else if (Reply.Status == IPStatus.Success) { ListBoxArray.Items.Add(s); TextboxStatus.Text = (Reply.Options == null) ? "Sem Opções" : "Success"; TextboxError.Text = ""; Sucesso = true; TabelaDinamimcaSucess(Sucesso, count, s.ToString(), DateTime.Now.ToString(), Reply.RoundtripTime.ToString(), TextboxStatus.Text); } else { ListBoxArray.Items.Add(s); TextboxStatus.Text = (Reply.Options == null) ? "Sem Opções" : "Erro"; TextboxError.Text = Reply.Status.ToString(); TextboxStatus.Text = "Falhou"; TabelaDinamimcaSucess(Sucesso, count, s.ToString(), DateTime.Now.ToString(), Reply.RoundtripTime.ToString(),TextboxStatus.Text); } } return; } } private void TabelaDinamimcaSucess(bool sucesso, int index, string host, string data, string tempo,string status) { string[] row = new string[] { index.ToString(), host, data, tempo,status }; dataGridView1.Rows.Add(row); int number_of_rows = dataGridView1.RowCount -1; Bitmap b = new Bitmap((sucesso == true ? Properties.Resources.greenBall : Properties.Resources.redBall)); Icon icon = Icon.FromHandle(b.GetHicon()); dataGridView1.Rows[number_of_rows].Cells["img"].Value = icon; dataGridView1.Show(); }
jmldias Posted February 8, 2013 at 09:49 AM Report #494582 Posted February 8, 2013 at 09:49 AM Estive a dar uma vista de olhos e reparei que na gralha (código) falta os tamanho delas tipo isto: dataGridView1.Columns[0].HeaderText = "Codigo"; dataGridView1.Columns[1].HeaderText = "Nome"; dataGridView1.Columns[0].Width = 50; dataGridView1.Columns[1].Width = 120;
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now