public void Incluir(Categoria categoria)
        {
            // TODO: Validar se a categoria não está nula
            // Verificar tamanho dos campos antes de fazer a inclusao/edicao

            if (string.IsNullOrEmpty(categoria.Nome))
            {
                throw new Exception("O nome da categoria nao pode ser nulo ou vazio!");
            }

            if (categoria.Nome.Length > 50)
            {
                throw new Exception("O nome da categoria deve ser menor que 50 chars!");
            }

            categoria.Status = StatusCategoria.Pendente;

            var dao = new CategoriaDAO();
            var existente = dao.Selecionar(categoria.Nome);

            if (existente != null)
            {
                throw new Exception("Categoria ja existente!");
            }

            dao.Incluir(categoria);
        }
        protected void SalvarButton_Click(object sender, EventArgs e)
        {
            try
            {
                var categoria = new Categoria();
                categoria.Nome = this.NomeTextBox.Text;

                var logica = new CategoriaLogica();

                if (!string.IsNullOrEmpty(this.IdTextBox.Text))
                {
                    categoria.Id = int.Parse(this.IdTextBox.Text);
                }

                if (categoria.Id > 0)
                {
                    logica.Editar(categoria);
                }
                else
                {
                    logica.Incluir(categoria);
                }

                this.IdTextBox.Text = string.Empty;
                this.NomeTextBox.Text = string.Empty;

                this.PopularCategorias();
            }
            catch (Exception ex)
            {
                this.MensagemLabel.Text = ex.Message;
            }
        }
        protected void CategoriasGridView_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            var logica = new CategoriaLogica();
            var id = int.Parse(e.CommandArgument.ToString());

            if (e.CommandName == "Editar")
            {
                var categoria = logica.Selecionar(id);

                if (categoria != null)
                {
                    this.IdTextBox.Text = categoria.Id.ToString();
                    this.NomeTextBox.Text = categoria.Nome;
                }
            }
            else if (e.CommandName == "Excluir")
            {
                var categoria = new Categoria();
                categoria.Id = id;

                logica.Excluir(categoria);

                this.PopularCategorias();
            }
        }
        public void Editar(Categoria categoria)
        {
            //TODO: Colocar validacoes de negocio

            var dao = new CategoriaDAO();

            dao.Editar(categoria);
        }
        public void Excluir(Categoria categoria)
        {
            var query = "DELETE FROM Categoria WHERE Id = @Id";
            var command = new SqlCommand(query);

            command.Parameters.Add(new SqlParameter("@Id", categoria.Id));

            this.ExecuteNonQuery(command);
        }
        public void Excluir(Categoria categoria)
        {
            //TODO: Colocar validacoes de negocio
            // Verificar se a categoria existe no banco
            // Verificar se a categoria possui algum registro de produto relacionado

            var dao = new CategoriaDAO();

            dao.Excluir(categoria);
        }
        public void Incluir(Categoria categoria)
        {
            var query = "INSERT INTO Categoria (Nome, Status) VALUES (@Nome, @Status)";
            var command = new SqlCommand(query);

            command.Parameters.Add(new SqlParameter("@Nome", categoria.Nome));
            command.Parameters.Add(new SqlParameter("@Status", categoria.Status));

            this.ExecuteNonQuery(command);
        }
        public void Editar(Categoria categoria)
        {
            var query = "UPDATE Categoria SET Nome = @Nome WHERE Id = @Id";
            var command = new SqlCommand(query);

            command.Parameters.Add(new SqlParameter("@Nome", categoria.Nome));
            command.Parameters.Add(new SqlParameter("@Id", categoria.Id));

            this.ExecuteNonQuery(command);
        }
        public IList<Categoria> Listar()
        {
            var query = "SELECT * FROM Categoria";
            var command = new SqlCommand(query);

            var dt = this.ExecuteDataTable(command);
            var lista = new List<Categoria>();

            foreach (DataRow row in dt.Rows)
            {
                var categoria = new Categoria();
                categoria.Id = int.Parse(row["Id"].ToString());
                categoria.Nome = row["Nome"].ToString();
                categoria.Status = (StatusCategoria)int.Parse(dt.Rows[0]["Status"].ToString());

                lista.Add(categoria);
            }

            return lista;
        }
        public Categoria Selecionar(int id)
        {
            var query = "SELECT * FROM Categoria WHERE Id = @Id";
            var command = new SqlCommand(query);

            command.Parameters.Add(new SqlParameter("@Id", id));

            var dt = this.ExecuteDataTable(command);

            if (dt.Rows.Count == 0)
            {
                return null;
            }

            var categoria = new Categoria();
            categoria.Id = int.Parse(dt.Rows[0]["Id"].ToString());
            categoria.Nome = dt.Rows[0]["Nome"].ToString();
            categoria.Status = (StatusCategoria)int.Parse(dt.Rows[0]["Status"].ToString());

            return categoria;
        }