Xamarin ListView显示来自SQLite数据库C#Android的项目
本文关键字:数据库 C#Android 项目 SQLite ListView 显示 Xamarin | 更新日期: 2023-09-27 18:25:54
在我的情况下,我想显示我创建的本地SQLite数据库中的项目,如下所示:
public string CreateDB() //create database
{
var output = "";
string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "IsoModule.db3");
output = "Database Created";
return output;
}
public string CreateTable() //create table
{
try
{
string dbPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "IsoModule.db3");
var db = new SQLiteConnection(dbPath);
db.CreateTable<UserInfo>();
db.CreateTable<TableInfo>();
string result = "Table(s) created";
return result;
}
catch (Exception ex)
{
return ("Error" + ex.Message);
}
}
这是我想要检索数据的代码
string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "IsoModule.db3");
var tablelistout = new SQLiteConnection(path);
var alltables = tablelistout.Table<TableInfo>();
foreach (var listing in alltables)
{
var from = new string[]
{
listing.tname + " - " + listing.status
};
ListView listtable = (ListView)FindViewById(Resource.Id.listtable);
listtable.Adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleListItem1, from);
}
代码运行时NO ERROR,但它只显示表中的最后一项。这让我很困惑,所以我想问如何从特定的表中检索所有数据?或者,如果有人问了同样的问题,请与我分享链接。许多人对此表示赞赏。
var alltables = tablelistout.Table<TableInfo>();
var data = new List<string>();
foreach (var listing in alltables)
{
data.Add(listing.tname + " - " + listing.status);
}
ListView listtable = (ListView)FindViewById(Resource.Id.listtable);
listtable.Adapter = new ArrayAdapter(this, Android.Resource.Layout.SimpleListItem1, data.ToArray());
我只做了两件事。首先,我移出了数组的初始化。其次,我移出了适配器的listView+赋值。
你的问题是,在循环中,你总是覆盖你在上一次迭代中所做的一切(留下最后一项,就像你说的那样)。
此外,您应该注意,如果您计划拥有相当多的数据,那么创建一个自定义适配器对您来说非常重要。ArrayAdapter是一个原生的Android类,然后由一个C#Xamarin对象封装,这意味着每行都有一个C#和Java对象。它增加了开销,因为两个垃圾收集器都有工作要做,并且可能导致性能问题。Xamarin开发人员通常会避免使用它,但快速原型除外。
另一方面,我将使用FindViewById<T>(Int32)
而不是FindViewById(Int32)
,并在您的情况下将其强制转换为.FindViewById<ListView>(Resource.Id.listtable)
。只是利用了泛型的力量。