Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 验证和显示来自Xamarin.Forms的数据库信息_C#_Sqlite_Xamarin_Xamarin.forms - Fatal编程技术网

C# 验证和显示来自Xamarin.Forms的数据库信息

C# 验证和显示来自Xamarin.Forms的数据库信息,c#,sqlite,xamarin,xamarin.forms,C#,Sqlite,Xamarin,Xamarin.forms,我开始学习如何使用Xamarin.Forms进行应用程序开发。我正在制作一个简单的应用程序,它只包含一个注册、登录和一个页面,在您登录时显示相应的信息 然而,到目前为止,我遇到了一些问题,主要是数据验证。为什么它在XAML中如此复杂?在HTML中,您可以只设置属性“required”,而我所看到的XF的每一个解决方案都声称是“简单”的,有时包含数百行代码 在数据验证之后,我还想确保如果已经有用户使用该电子邮件地址注册,应用程序不会让我保存信息。最后,我想在用户登录后输出他们的信息 我的应用程序由

我开始学习如何使用Xamarin.Forms进行应用程序开发。我正在制作一个简单的应用程序,它只包含一个注册、登录和一个页面,在您登录时显示相应的信息

然而,到目前为止,我遇到了一些问题,主要是数据验证。为什么它在XAML中如此复杂?在HTML中,您可以只设置属性“required”,而我所看到的XF的每一个解决方案都声称是“简单”的,有时包含数百行代码

在数据验证之后,我还想确保如果已经有用户使用该电子邮件地址注册,应用程序不会让我保存信息。最后,我想在用户登录后输出他们的信息

我的应用程序由3个视图组成:登录页面、登录页面和主页。成功验证后,用户将被带到主页

我使用SQLite处理DB,使用一个表RegUserTable.cs

这是RegistrationPage.xaml.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using SQLite;
using System.Text;
using System.Threading.Tasks;
using UNEDProFinal.Tables;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;



namespace UNEDProFinal.Views
{
    [XamlCompilation(XamlCompilationOptions.Compile)]
    public partial class RegistrationPage : ContentPage
    {
        public RegistrationPage()
        {
            InitializeComponent();
        }

        void Handle_Clicked(object sender, EventArgs e)
        {
            var dbpath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "UserDatabase.db");
            var db = new SQLiteConnection(dbpath);
            db.CreateTable<RegUserTables>();

            var ChosenDate = EntryUserDOB.ToString();


            if (EntryUserPassword.Text != ConfirmEntryUserPassword.Text)
            {
                Device.BeginInvokeOnMainThread(async () =>
                {
                    var passError = await this.DisplayAlert("Las contraseñas no concuerdan", "Error", "Intentarlo de Nuevo", "Salir");
                    if (passError)
                        await Navigation.PushAsync(new RegistrationPage());
                    else
                    {
                        await Navigation.PushAsync(new LoginPage());
                    }
                });
            }

            else
            {

                var item = new RegUserTables()
                {
                    UserName = EntryUserName.Text,
                    Password = EntryUserPassword.Text,
                    Email = EntryUserEmail.Text,
                    PhoneNumber = EntryUserPhoneNumber.Text,
                    UserFirstSurname = EntryUserFirstSurname.Text,
                    UserLastSurname = EntryUserLastSurname.Text,
                    UserDOB = ChosenDate
                };

                db.Insert(item);
                Device.BeginInvokeOnMainThread(async () =>
                {
                    var result = await this.DisplayAlert("Felicidades", "Usuario Registrado", "Continuar", "Salir");
                    if (result)
                        await Navigation.PushAsync(new LoginPage());
                });
            }
        }
    }



}
我还想知道…根据我目前保存信息的逻辑,数据库是否真的将输入的信息与特定用户关联?或者它只是抛出随机信息

我想找到一种简单的方法来验证中的信息 xamarin.forms

您可以通过在Xamarin.forms中使用来编写自己的验证。例如:

public class PasswordValidationBehavior : Behavior<Entry>
{
    const string passwordRegex = @"^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$";

    protected override void OnAttachedTo(Entry bindable)
    {
        bindable.TextChanged += HandleTextChanged;
        base.OnAttachedTo(bindable);
    }

    void HandleTextChanged(object sender, TextChangedEventArgs e)
    {
        bool IsValid = false;
        IsValid = (Regex.IsMatch(e.NewTextValue, passwordRegex));
        ((Entry)sender).TextColor = IsValid ? Color.Default : Color.Red;
    }

    protected override void OnDetachingFrom(Entry bindable)
    {
        bindable.TextChanged -= HandleTextChanged;
        base.OnDetachingFrom(bindable);
    }
}
以下是一些你可以阅读的博客:和

我想找到一种方法,将保存的信息显示在 应用程序

由于您已将信息保存在本地数据库中,因此您可以通过特定的用户ID从数据库中查询个人信息,然后使用或其他您想要的方式在页面中显示这些信息。请随便问我任何问题


请参阅:

您可以使用
[必需]
属性。你真正的问题是什么?@Jason这里有两个非常明确的问题:我想找到一种简单的方法来验证xamarin.forms中的信息,我想找到一种方法在应用程序的页面中显示保存的信息。无意冒犯,但是,如果验证的解决方案有7个步骤,那可能不是我想要的。谢谢。我可以在设置中使用数据绑定吗?我不认为我遵循的教程使用的是数据绑定,所以我担心必须从头开始。此外,验证是否也适用于检查,例如,数据库中是否已经存在给定的电子邮件,如果是这种情况,则不允许其存储?@Dasphillipbrau您可以使用数据绑定和设置来显示/更新值。遵循同样是学习Xamarin.Forms的好方法。在将值存储到数据库之前,应始终验证该值。若它已经存在,当您阅读它并发现它无效时,您可以要求用户更新它,然后在您的本地数据库中更新它。
using System;
namespace UNEDProFinal.Tables
{
    public class RegUserTables
    {
        public Guid UserId { get; set; }
        public string UserName { get; set; }
        public string UserFirstSurname { get; set; }
        public string UserLastSurname { get; set; }
        public string Password { get; set; }
        public string Email { get; set; }
        public string PhoneNumber { get; set; }
        public string UserDOB { get; set; }

    }
}
public class PasswordValidationBehavior : Behavior<Entry>
{
    const string passwordRegex = @"^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$";

    protected override void OnAttachedTo(Entry bindable)
    {
        bindable.TextChanged += HandleTextChanged;
        base.OnAttachedTo(bindable);
    }

    void HandleTextChanged(object sender, TextChangedEventArgs e)
    {
        bool IsValid = false;
        IsValid = (Regex.IsMatch(e.NewTextValue, passwordRegex));
        ((Entry)sender).TextColor = IsValid ? Color.Default : Color.Red;
    }

    protected override void OnDetachingFrom(Entry bindable)
    {
        bindable.TextChanged -= HandleTextChanged;
        base.OnDetachingFrom(bindable);
    }
}
<Entry Placeholder="Enter a PassWord">
    <Entry.Behaviors>
        <local:PasswordValidationBehavior />
    </Entry.Behaviors>
</Entry>