none
DataGrid em branco. RRS feed

  • Pergunta

  • Pessoal,

    Preciso de uma ajuda de vcs...

    Tenho um datagrid onde consulto o banco e trago alguns dados, coisa que estava funcionando normalmente, mas aqui não funciona, esta aparecendo tudo em branco... "sem dados".

    Veja se alguem pode me ajudar... segue meu código:

    Chamada:

    private void btconsultapedido_Click(object sender, EventArgs e)
            {
                ConsultaPedidos pesquisa = new ConsultaPedidos(ref dtConsultaPedidos);
                pesquisa.ConsultaGeralPedidos(ref dtConsultaPedidos, cbescolharazao, dt3, dt4, txtvalortotalped);
            }

    Função:

    namespace RMBR
    {

    class ConsultaPedidos
        {
            DataGridView dtgridconspedido;
            private DataGridView dtConsultaPedidos;

            public ConsultaPedidos(ref DataGridView dtConsultaPedidos)
            {
                this.dtConsultaPedidos = dtConsultaPedidos;
                this.dtgridconspedido = dtConsultaPedidos;
            }
            public void ConsultaGeralPedidos(ref DataGridView dtConsultaPedidos, ComboBox cbescolharazao, DateTimePicker dt3, DateTimePicker dt4, TextBox txtvalortotalped)
            {
                string connection = ConfigurationManager.ConnectionStrings["AccessConnectionString"].ConnectionString;

                OleDbConnection cn = null;
                OleDbCommand cmd = null;

                string datacons = dt3.Text;
                DateTime data3 = Convert.ToDateTime(datacons);
                string datacons1 = dt4.Text;
                DateTime data4 = Convert.ToDateTime(datacons1);
                /*string horacons = txtconspedhora.Text;
                DateTime hora = Convert.ToDateTime(horacons);*/

                string sql = "SELECT [PEDRAZAO], [PEDENDENTREGA], [PEDPRODUTO], [PEDUNIDADE], [PEDQUANTIDADE], [PEDPESO], [PEDVALORUN], [PEDVALORTOTAL], [PEDNUMNF] FROM CADPEDIDO WHERE PEDRAZAO LIKE '%" + cbescolharazao.Text + "%' AND PEDDATA >= #" + data3 + "# AND PEDDATA <= #" + data4 + "#";

                try
                {
                    cn = new OleDbConnection();
                    cn.ConnectionString = connection;
                    cn.Open();

                    cmd = new OleDbCommand(sql, cn);
                    cmd.CommandType = CommandType.Text;

                    DataTable dt = new DataTable("Pedidos");
                    OleDbDataAdapter adaptador = new OleDbDataAdapter();
                    adaptador.SelectCommand = cmd;
                    adaptador.Fill(dt);
                    dtgridconspedido.DataSource = dt;

                    dtgridconspedido.Columns["PEDRAZAO"].HeaderText = "Razão Social";
                    dtgridconspedido.Columns["PEDRAZAO"].Width = 300;
                    dtgridconspedido.Columns["PEDENDENTREGA"].HeaderText = "Endreço de Entrega";
                    dtgridconspedido.Columns["PEDENDENTREGA"].Width = 220;
                    dtgridconspedido.Columns["PEDPRODUTO"].HeaderText = "Produto";
                    dtgridconspedido.Columns["PEDPRODUTO"].Width = 170;
                    dtgridconspedido.Columns["PEDUNIDADE"].HeaderText = "UN";
                    dtgridconspedido.Columns["PEDUNIDADE"].Width = 40;
                    dtgridconspedido.Columns["PEDQUANTIDADE"].HeaderText = "QTD";
                    dtgridconspedido.Columns["PEDQUANTIDADE"].Width = 40;
                    dtgridconspedido.Columns["PEDPESO"].HeaderText = "Peso";
                    dtgridconspedido.Columns["PEDPESO"].Width = 50;
                    dtgridconspedido.Columns["PEDVALORUN"].HeaderText = "Valor UN";
                    dtgridconspedido.Columns["PEDVALORUN"].Width = 50;
                    dtgridconspedido.Columns["PEDVALORTOTAL"].HeaderText = "Valor Total";
                    dtgridconspedido.Columns["PEDVALORTOTAL"].Width = 60;
                    dtgridconspedido.Columns["PEDNUMNF"].HeaderText = "Numero NF";
                    dtgridconspedido.Columns["PEDNUMNF"].Width = 150;

                    decimal soma = 0;
                    foreach (DataGridViewRow dr in dtConsultaPedidos.Rows)
                        soma += Convert.ToDecimal(dr.Cells["PEDVALORTOTAL"].Value);
                    txtvalortotalped.Text = Convert.ToString(soma);
                    Math.Ceiling(soma);

                    dt.Rows.Add(" ");
                    dt.Rows.Add("VALOR PEDIDO :", soma);

                    var _with1 = dtConsultaPedidos;
                    _with1.ForeColor = Color.Blue;
                    _with1.Font = new Font("Arial", 7f);

                    cn.Close();
                }
                catch (Exception ex)
                {
                    string erro = string.Empty;
                    erro = ex.Message;
                    if (ex.InnerException != null)
                        erro += Environment.NewLine + ex.InnerException.Message;
                    MessageBox.Show(erro);
                }
            }
        }
    }

    Desde já muito obrigado...


    Luiz Carlos

    segunda-feira, 5 de novembro de 2012 20:20

Respostas

  • Assim:

    // JAMAIS UTILIZE INSTRUÇÕES SQL COMO ESTA , perigo de injeção SQL com código malicioso
    //SqlCommand cmd = new SqlCommand(Select * from Customers where city = '" + txtcidade.text + "'";
    // 1. declara o objeto command com parâmetro
    SqlCommand cmd = new SqlCommand("select * from Customers where city = @Cidade", conn);
    // 2. define os parêmetros usados no objeto command
    SqlParameter param = new SqlParameter();
    param.ParameterName = "@Cidade";
    param.Value = cboCidade.Text;
    // 3. inclui um novo parâmetro ao comando
    cmd.Parameters.Add(param);

    • Marcado como Resposta LC-Locker terça-feira, 19 de março de 2013 17:20
    quinta-feira, 8 de novembro de 2012 19:45

Todas as Respostas

  • Ou deve ter dado erro. Ou a consulta que ele está efetuando no banco de dados não está retornando nenhum registro. faça a consulta diretamente no banco de dados para ver se retorna dados.
    terça-feira, 6 de novembro de 2012 21:20
  • Fiz alguns testes e ele não esta retornando nesse momento ->  FROM CADPEDIDO WHERE PEDRAZAO LIKE '%" + cbescolharazao.Text + "%' AND PEDDATA >= #" + data3 + "# AND PEDDATA <= #" + data4 + "#";

    Este -> AND PEDDATA <= #" + data4 + "#" não esta funcionando mas não entendi o pq? estava tudo ok... e funcionava normalmente...


    Luiz Carlos

    quarta-feira, 7 de novembro de 2012 19:44
  • Nunca se deve concatenar os valores assim para criar uma query.

    Deve usar parâmetros, veja aqui nesse link possui vários tutoriais. É só procurar ali que você vai encontrar como fazer acesso a dados da maneira correta. Usando parâmetros no SqlCommand, ele faz automaticamente a conversão para o formato correto de data do banco de dados.

    http://social.msdn.microsoft.com/Forums/pt-BR/vscsharppt/thread/52255833-a691-4fed-9db3-832d68a00ff8

    quarta-feira, 7 de novembro de 2012 19:50
  • Mesmo que seja para Banco Access?

    Luiz Carlos

    quarta-feira, 7 de novembro de 2012 20:31
  • Mesmo que seja para access.

    Mas você pode escolher entre o jeito errado e depois dizer que estava funcionando e parou de funcionar. Ou fazer do jeito certo e não precisar se preocupar depois.

    quarta-feira, 7 de novembro de 2012 20:38
  • Danimar,

    Bom dia,

    Vc tem idéia de como poderia melhorar isso?

    Vi o link que vc mandou mas não achei lá...


    Luiz Carlos

    quinta-feira, 8 de novembro de 2012 11:58
  • Assim:

    // JAMAIS UTILIZE INSTRUÇÕES SQL COMO ESTA , perigo de injeção SQL com código malicioso
    //SqlCommand cmd = new SqlCommand(Select * from Customers where city = '" + txtcidade.text + "'";
    // 1. declara o objeto command com parâmetro
    SqlCommand cmd = new SqlCommand("select * from Customers where city = @Cidade", conn);
    // 2. define os parêmetros usados no objeto command
    SqlParameter param = new SqlParameter();
    param.ParameterName = "@Cidade";
    param.Value = cboCidade.Text;
    // 3. inclui um novo parâmetro ao comando
    cmd.Parameters.Add(param);

    • Marcado como Resposta LC-Locker terça-feira, 19 de março de 2013 17:20
    quinta-feira, 8 de novembro de 2012 19:45