无法从Sqlite插入ListView中的数据

时间:2018-12-25 10:07:32

标签: c# sqlite xamarin xamarin.ios

我正在尝试将用户的某些数据插入ListView,但是似乎无法显示其中的任何数据。

这是到目前为止我的代码的样子。问题出在最后两个类(Invite_Page.xaml.cs和Invite_Page.xaml)中,但是我还从其他可能相关的类中粘贴了我的笔记。

User.cs:

public class User {

    public string fName { get; set; }

    public string lName { get; set; }

    public string uName { get; set; }

    public string Pw { get; set; }

    // public string cls { get; set; }

}

fNamelName都是字符串

DatabaseManager.cs:

public class DatabaseManager
{
   SQLiteConnection dbConnection;
   public DatabaseManager()
   {
      dbConnection = DependencyService.Get<IDBInterface>().CreateConnection();
   }

   public List<User> GetAllUsers()
      return dbConnection.Query<User>("Select * From [User]");

   public int SaveUser(User aUser)
   {
      //dbConnection.CreateTable<User>();
      //return 1;
      return dbConnection.Insert(aUser);
   }

   public List<User> GetAllNames()
      return dbConnection.Query<User>("Select fName, lName From [User] ORDER BY fName;");

   //.....

Invite_Page.xaml:

<ListView 
      x:Name="invitees"
      SeparatorColor="White"
      BackgroundColor="Transparent"
      ItemsSource="{Binding invitees}"
      IsGroupingEnabled="true"
      IsPullToRefreshEnabled="true"
      ItemTapped="Handle_ItemTapped">
   <ListView.ItemTemplate>
      <DataTemplate>
         <TextCell Text="{Binding}" TextColor="White"/>
      </DataTemplate>
   </ListView.ItemTemplate>
</ListView>

Invite_Page.xaml.cs:

DatabaseManager DBM = new DatabaseManager();

   // List<User> Invitees(String SearchText = null) 
   // {
       // invitees.ItemsSource = DBM.GetAllNames();
       // return Invitees();
   // }
   protected override void OnAppearing()
   {
      base.OnAppearing();
      invitees.ItemsSource = DBM.GetAllNames();
   }

在Invite_Page.xaml.cs代码中,您可以看到我尝试使用注释掉的代码来输入数据。结果是该列表中没有任何内容。但是,使用第二种方法(未注释掉),结果是将“ RoseySports.User”放置在ListView中。我正在尝试将fName和lName的值作为一个字符串放在一起,并放置在ListView中。

Cron

3 个答案:

答案 0 :(得分:1)

首先,您必须指定从用户模型到使用绑定的TextCell真正需要的内容。您设置为ItemSource用户,但只设置了TextCell Binding,而没有任何变量。例如,尝试设置Class<String> stringClass = String.class 。 其次,尝试使用ViewModel填充数据。在此处了解更多信息:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/enterprise-application-patterns/mvvm

答案 1 :(得分:1)

您需要创建“自定义列表”项目模板以显示对象中的值。

例如,要显示fName,lName和uName,则必须使用以下代码将值绑定到列表项

you can use momentjs to compare dates like this
var moment = require('moment');
var datetime = '2017-07-30T09:29:04.000Z';
var localTime = moment();
var oldTime = moment(datetime);
console.log("Current datetime is older than " + datetime + " by 10 days = " + 
(localTime.diff(oldTime, 'days') >= 10));

答案 2 :(得分:1)

最简单的方法是覆盖ToString()类的User方法:

public override string ToString()
{
   return fName + " " + lName;
}

另一种选择是构建更复杂的DataTemplate,如@ViralThakker所述。

P.S。如果要在代码中分配ItemsSource="{Binding invitees}",则XAML中的ItemsSource行将不可用。