Format a Field of Decimal Type and Include in SQLite Xamarin Forms with Android

1

Hello to the masters of Xamarin Forms, I have a small problem, for you maybe very simple. I am not able to format a field of type decimal in monetary value and then make the insert of it in SQLite. Below is the code for the Products.cs class:

using System;
using System.Collections.Generic;
using System.Text;
using SQLite;

namespace rei_das_verduras.Model
{
    public class Produtos
    {
        [PrimaryKey, AutoIncrement]
        public long? pro_id { get; set; }
        public string pro_nome { get; set; }
        public decimal pro_preco_unitario { get; set; }
    }
}

Below is the code for the ProductsDAL.cs class:

using rei_das_verduras.Infra;
using rei_das_verduras.Model;
using SQLite;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Xamarin.Forms;

namespace rei_das_verduras.DAL
{
    public class ProdutosDAL
    {
        private SQLiteConnection sqlConnection;

        public ProdutosDAL()
        {
            this.sqlConnection = DependencyService.Get<ISQLiteDBConnection>().DbConnection();
            this.sqlConnection.CreateTable<Produtos>();
        }

        public void Add(Produtos produto)
        {
            sqlConnection.Insert(produto);
        }

        public void DeleteById(long id)
        {
            sqlConnection.Delete<Produtos>(id);
        }

        public void Update(Produtos produto)
        {
            sqlConnection.Update(produto);
        }

        public IEnumerable<Produtos> GetAll()
        {
            return (from t in sqlConnection.Table<Produtos>() select t).OrderBy(i => i.pro_nome).ToList();
        }

        public Produtos GetProdutoById(long id)
        {
            return sqlConnection.Table<Produtos>().FirstOrDefault(t => t.pro_id == id);
        }
    }
}

Below the ProductsViewModel class code:

using MvvmHelpers;
using rei_das_verduras.DAL;
using rei_das_verduras.Model;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using System.Windows.Input;
using Xamarin.Forms;

namespace rei_das_verduras.ViewModel
{
    public class ProdutosViewModel : BaseViewModel
    {
        ProdutosDAL produtoDAL = new ProdutosDAL();

        private ObservableCollection<Produtos> _produtos;
        public ObservableCollection<Produtos> Produtos
        {
            get { return _produtos; }
            set
            {
                if (_produtos != value)
                {
                    _produtos = value;
                    OnPropertyChanged(nameof(Produtos));
                }
            }
        }

        private long? _pro_id;
        private string _pro_nome;
        private decimal _pro_preco_unitario;

        public ProdutosViewModel()
        {
            Produtos = new ObservableCollection<Produtos>(produtoDAL.GetAll());
        }

        public ProdutosViewModel(Produtos produto)
        {
            this._pro_id = produto.pro_id;
            this._pro_nome = produto.pro_nome;
            this._pro_preco_unitario = produto.pro_preco_unitario;
            Produtos = new ObservableCollection<Produtos>(produtoDAL.GetAll());
        }

        public long? pro_id
        {
            get { return _pro_id; }
            set { _pro_id = value; OnPropertyChanged(); }
        }

        public string pro_nome
        {
            get { return _pro_nome; }
            set { _pro_nome = value; OnPropertyChanged(); }
        }

        public decimal pro_preco_unitario
        {
            get { return _pro_preco_unitario; }
            set { _pro_preco_unitario = value; OnPropertyChanged(); }
        }

        public void RemoverProduto(Produtos pro)
        {
            try
            {
                produtoDAL.DeleteById((long)pro.pro_id);
            }
            catch
            {
                App.Current.MainPage.DisplayAlert("Erro na Exclusão", "Falha ao Excluir Produto !!!!", "OK");
            }
        }

        public ICommand Gravar
        {
            get
            {
                var produtoDAL = new ProdutosDAL();
                return new Command(() =>
                {

                    Produtos pro = GetProduto();
                    if ((pro.pro_nome != null) && (pro.pro_preco_unitario != 0))
                    {

                        produtoDAL.Add(pro);
                        App.Current.MainPage.DisplayAlert("Novo Produto", "Produto Incluído com Sucesso !!!!", "OK");
                    }
                    else
                    {
                        App.Current.MainPage.DisplayAlert("Erro na Inclusão", "Produto não Foi Incluído !!!!", "OK");
                    }
                });
            }
        }

        public ICommand Alterar
        {
            get
            {
                var produtoDAL = new ProdutosDAL();
                return new Command(() =>
                {
                    Produtos pro = GetProduto();
                    if ((pro.pro_nome != null) && (pro.pro_preco_unitario != 0))
                    {
                        produtoDAL.Update(pro);
                        App.Current.MainPage.DisplayAlert("Alterar Produto", "Alteração do Produto Realizada com Sucesso !!!!", "OK");
                    }
                    else
                    {
                        App.Current.MainPage.DisplayAlert("Erro na Alteraçpão", "Produto não Foi Alterado !!!!", "OK");
                    }
                });
            }
        }

        private Produtos GetProduto()
        {
            return new Produtos()
            {
                pro_id = this.pro_id,
                pro_nome = this.pro_nome,
                pro_preco_unitario = this.pro_preco_unitario
            };
        }
    }
}

Below the code for the ProductsProduct.xaml:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="rei_das_verduras.Views.TelaProdutos"
             BackgroundImage="fundo_telas.jpg"
             Title="Produtos">
    <StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
        <ListView x:Name="lvProdutos" HasUnevenRows="True" SeparatorColor="Blue"
                HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
            <ListView.ItemTemplate>
                <DataTemplate>
                    <ViewCell>
                        <ViewCell.ContextActions>
                            <MenuItem Clicked="OnAlterarClick" CommandParameter="{Binding .}" Text="Alterar"/>
                            <MenuItem Clicked="OnRemoverClick" CommandParameter="{Binding .}" Text="Excluir" IsDestructive="True"/>
                        </ViewCell.ContextActions>
                        <StackLayout Orientation="Horizontal" Padding="2">
                            <StackLayout HorizontalOptions="StartAndExpand">
                                <Label Text="{Binding pro_nome}" TextColor="Blue" FontSize="Medium"/>
                                <Label Text="{Binding pro_preco_unitario, StringFormat=' {0}'}" TextColor="Black" FontSize="Medium"/>
                            </StackLayout>
                        </StackLayout>
                    </ViewCell>
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
        <StackLayout Padding="0" VerticalOptions="End">
            <Button Text="Incluir Produto" x:Name="BtnNovoItem" Image="novo.jpg" BackgroundColor="White"/>
        </StackLayout>
    </StackLayout>
</ContentPage>

Below the code for the Products.xaml.cs screen:

using rei_das_verduras.Model;
using rei_das_verduras.ViewModel;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace rei_das_verduras.Views
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class TelaProdutos : ContentPage
    {
        private ProdutosViewModel produtos;
        private ObservableCollection<Produtos> _produtos;

        public TelaProdutos ()
        {
            InitializeComponent ();
            BtnNovoItem.Clicked += BtnNovoItemClick;
        }
        protected override void OnAppearing()
        {
            base.OnAppearing();
            produtos = new ProdutosViewModel();
            _produtos = produtos.Produtos;
            lvProdutos.ItemsSource = produtos.Produtos;
        }

        private async void BtnNovoItemClick(object sender, EventArgs e)
        {
            Produtos produto = new Produtos();
            await Navigation.PushAsync(new TelaProdutosCRUD(produto));
        }

        private async void OnAlterarClick(object sender, EventArgs e)
        {
            try
            {
                var mi = ((MenuItem)sender);
                var produto = mi.CommandParameter as Produtos;
                if (produto != null)
                {
                    await Navigation.PushAsync(new TelaProdutosCRUD(produto));
                }
                else
                {
                    return;
                }
            }
            catch (Exception ex)
            {
                await DisplayAlert("Erro : ", ex.Message, "OK");
            }
        }

        private async void OnRemoverClick(object sender, EventArgs e)
        {
            var mi = ((MenuItem)sender);
            var produto = mi.CommandParameter as Produtos;
            if (produto != null)
            {
                var opcao = await DisplayAlert("Excluir Produto", "Deseja Realmente Excluir Este Produto ? :    " + produto.pro_nome.ToUpper() + " ? ", "Sim", "Não");
                if (opcao)
                {
                    var produtos = new ProdutosViewModel();
                    produtos.RemoverProduto(produto);
                    _produtos.Remove(produto);
                }
            }
            else
            {
                await DisplayAlert("Erro na Exclusão", "Não Foi Possível Excluir o Produto !!!!", "OK");
            }
        }
    }
}

Below the code for the ProductsProductCRUD.xaml:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="rei_das_verduras.Views.TelaProdutosCRUD"
             BackgroundImage="fundo_telas.jpg"
             Title="Produtos">
    <StackLayout VerticalOptions="Center" Padding="6">
        <StackLayout>
            <Entry  Placeholder="Nome do Produto" x:Name="txtpro_nome" Text="{Binding pro_nome}"/>
            <Entry  Placeholder="Preço Unitário" x:Name="txtpro_preco_unitario" Text="{Binding pro_preco_unitario, StringFormat=' {0}'}" Keyboard="Numeric"/>
        </StackLayout>
        <StackLayout Orientation="Horizontal" HorizontalOptions="Center">
            <Button Text="Incluir Produto" x:Name="btnIncluirPro" Command="{Binding Gravar}" HorizontalOptions="Center"/>
            <Button Text="Alterar Produto" x:Name="btnAlterarPro" Command="{Binding Alterar}" HorizontalOptions="Center"/>
        </StackLayout>
    </StackLayout>
</ContentPage>

Below is the code for the ProductsProductCRUD.xaml.cs screen:

using rei_das_verduras.Model;
using rei_das_verduras.ViewModel;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Xamarin.Forms;
using Xamarin.Forms.Xaml;

namespace rei_das_verduras.Views
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class TelaProdutosCRUD : ContentPage
    {
        private string titulo;

        public TelaProdutosCRUD (Produtos produto)
        {
            InitializeComponent ();
            if (produto.pro_id == null)
            {
                Title = "Incluir Novo Produto";
                titulo = "Inclusão";
                btnAlterarPro.IsVisible = false;
            }
            else
            {
                Title = "Alterar Dados do Produto";
                titulo = "Alteração de dados";
                btnIncluirPro.IsVisible = false;
            }

            var produtovm = new ProdutosViewModel(produto);
            BindingContext = produtovm;
        }
    }
}

What I want and format the field of decimal type pro_preco_unitario, so that it can be recorded in the following format R $ 5.36 or higher in currency. I'm waiting for the masters, if possible. In advance I appreciate the help.

    
asked by anonymous 14.08.2018 / 15:05

0 answers