none
MessageBox em Datagrid c# RRS feed

  • Pergunta

  • bem tenho o seguinte datagrid


    como é q faço pra botá um MessageBox tipo assim

    if(coluna[2] for == 0,00 no periodo de 02/08/2014 a 31/08/2014)

    {

      MessageBox.Show("Todas a coluna [2] é = 0,00 menos a primeira row ");

    }


    é possível?




    terça-feira, 5 de agosto de 2014 18:45

Respostas

  • Bom dia Rhael, fiz um exemplo, verifica se te atende, abraço!!!

     public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                dataGridView1.DataSource = new List<Exemplo> 
                { 
                    new Exemplo { Id = 1, Periodo = new DateTime(2014,08,01), Indice = 0.00M }, 
                    new Exemplo { Id = 2, Periodo = new DateTime(2014,08,02), Indice = 0.10M }, 
                    new Exemplo { Id = 3, Periodo = new DateTime(2014,08,05), Indice = 0.40M }
                };
    
                List<int> linhas = new List<int>();
                for (int i = 0; i < dataGridView1.RowCount; i++)
                {
                    if (Decimal.Parse(dataGridView1.Rows[i].Cells[2].Value.ToString()) > 0.00M)
                    {
                        linhas.Add(i);
                    }
                }
    
                if (linhas.Count > 0)
                {
                    string mensagem = "As seguintes linhas não são 0.00:\n ";
                    for (int i = 0; i < linhas.Count; i++)
                    {
                        mensagem += String.Format("Linha: {0} \n",linhas[i]); 
                    }
    
                    MessageBox.Show(mensagem, "Atenção");
                }
    
    
            }
        }
    
        class Exemplo 
        {
            public int Id { get; set; }
            public DateTime Periodo { get; set; }
            public decimal Indice { get; set; }
        }

    Diego de O. Neves |Analista Desenvolvedor .NET
    Microsoft MCP | ITIL® V3 Foundation 

    quarta-feira, 6 de agosto de 2014 02:14
  • Rhael, pelo seu cenário, a única forma é percorrer linhas mesmo, seja pelo DataTable ou pelo grid direto...uma outra forma era fazer um filtro no DataTable, mas no fim daria no mesmo porque você precisa dizer ao usuário quais as linhas que não são 0.00 pelo o que entendi...

    Diego de O. Neves |Analista Desenvolvedor .NET
    Microsoft MCP | ITIL® V3 Foundation 

    quarta-feira, 6 de agosto de 2014 17:57

Todas as Respostas

  • Você quer colocar está mensagem dentro do Grid quando a condição acontecer?

    Wagner dos Santos

    quarta-feira, 6 de agosto de 2014 00:02
  • Bom dia Rhael, fiz um exemplo, verifica se te atende, abraço!!!

     public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                dataGridView1.DataSource = new List<Exemplo> 
                { 
                    new Exemplo { Id = 1, Periodo = new DateTime(2014,08,01), Indice = 0.00M }, 
                    new Exemplo { Id = 2, Periodo = new DateTime(2014,08,02), Indice = 0.10M }, 
                    new Exemplo { Id = 3, Periodo = new DateTime(2014,08,05), Indice = 0.40M }
                };
    
                List<int> linhas = new List<int>();
                for (int i = 0; i < dataGridView1.RowCount; i++)
                {
                    if (Decimal.Parse(dataGridView1.Rows[i].Cells[2].Value.ToString()) > 0.00M)
                    {
                        linhas.Add(i);
                    }
                }
    
                if (linhas.Count > 0)
                {
                    string mensagem = "As seguintes linhas não são 0.00:\n ";
                    for (int i = 0; i < linhas.Count; i++)
                    {
                        mensagem += String.Format("Linha: {0} \n",linhas[i]); 
                    }
    
                    MessageBox.Show(mensagem, "Atenção");
                }
    
    
            }
        }
    
        class Exemplo 
        {
            public int Id { get; set; }
            public DateTime Periodo { get; set; }
            public decimal Indice { get; set; }
        }

    Diego de O. Neves |Analista Desenvolvedor .NET
    Microsoft MCP | ITIL® V3 Foundation 

    quarta-feira, 6 de agosto de 2014 02:14
  • so que da seguinte maneira q vc postou Diego é percorre toda a linha do datagrid né isso? não é possível por período não?



    quarta-feira, 6 de agosto de 2014 11:45
  • É uma forma...pode sim, mas uma coisa, você preenche esse Grid com Lista? ou DataTable? você usar uma consulta LINQ por período e exibir a mensagem...

    Diego de O. Neves |Analista Desenvolvedor .NET
    Microsoft MCP | ITIL® V3 Foundation 

    quarta-feira, 6 de agosto de 2014 14:07
  • eu carrego ele da seguinte forma

    dataGridView2.DataSource = Conexao.Conexao.RetornaDataSet("SELECT * FROM tabFux WHERE datadia >= '" + primeiroDia + "' AND datadia<= '" + ultDia + "'").Tables[0];
    
    List<Ordenar> ordenarDados = new List<Ordenar>();
                Dictionary<string, float> entradas = new Dictionary<string, float>();
                Dictionary<string, float> saidas = new Dictionary<string, float>();
    
                foreach (DataGridViewRow item in dataGridView2.Rows)
                {
                    if (item.Cells[7].Value == DBNull.Value)
                    {
                        item.Cells[7].Value = "0,00";
                    }
                    if (item.Cells[4].Value == DBNull.Value)
                    {
                        item.Cells[4].Value = "0,00";
                    }
                    if (item.Cells[3].Value == DBNull.Value)
                    {
                        item.Cells[3].Value = "0,00";
                    }
                    if (item.Cells[6].Value == DBNull.Value)
                    {
                        item.Cells[6].Value = "0,00";
                    }
                    if (item.Cells[2].Value == DBNull.Value)
                    {
                        item.Cells[2].Value = "01/01/1900";
                    }
    
                    //adiciono na colecao
                    ordenarDados.Add(ObterRegistro(item.Cells[2], item.Cells[0], item.Cells[1],
                    item.Cells[6], item.Cells[4], item.Cells[3], item.Cells[7]));
    
                    string mes = item.Cells[1].Value.ToString();
    
                    float valorEntrada = float.Parse(item.Cells[4].Value.ToString());
                    if (entradas.ContainsKey(mes))
                        entradas[mes] += valorEntrada;
                    else
                        entradas.Add(mes, valorEntrada);
    
                    float valorSaida = float.Parse(item.Cells[3].Value.ToString());
                    if (saidas.ContainsKey(mes))
                        saidas[mes] += valorSaida;
                    else
                        saidas.Add(mes, valorSaida);
                }
    
                foreach (var item in ordenarDados.OrderBy(i => i.Data1))
                {
                    dataGridView3.Rows.Add(item.item2,
                                           item.Data1, item.item3, item.item4, item.item5, item.item6, item.item1);
                }
    
                for (int i = 0; i < entradas.Count; i++)
                {
                    KeyValuePair<string, float> entrada = entradas.ElementAt(i);
                    KeyValuePair<string, float> saida = saidas.ElementAt(i);
                    //   if (entrada.Value <= 0) continue;
    
                    int ultimoRegistro = ordenarDados.IndexOf(ordenarDados.Where(o => o.item2.Trim().Equals(entrada.Key)).Last()) + 1;
                    dataGridView3.Rows.Insert(ultimoRegistro, string.Empty, string.Empty, string.Empty,
                        entrada.Value.ToString("c2"), saida.Value.ToString("c2"), string.Empty, string.Empty);
    
                    DataGridViewRow row = dataGridView3.Rows[ultimoRegistro];
                    ordenarDados.Insert(ultimoRegistro, ObterRegistro(row.Cells[1], row.Cells[6], row.Cells[0],
                        row.Cells[2], row.Cells[3], row.Cells[4], row.Cells[5]));
                }
                

    quarta-feira, 6 de agosto de 2014 15:17
  • Rhael, pelo seu cenário, a única forma é percorrer linhas mesmo, seja pelo DataTable ou pelo grid direto...uma outra forma era fazer um filtro no DataTable, mas no fim daria no mesmo porque você precisa dizer ao usuário quais as linhas que não são 0.00 pelo o que entendi...

    Diego de O. Neves |Analista Desenvolvedor .NET
    Microsoft MCP | ITIL® V3 Foundation 

    quarta-feira, 6 de agosto de 2014 17:57
  • isso mesmo...
    quarta-feira, 6 de agosto de 2014 19:55