Sqlite 选择器SelectedItem和两个不同的DB表
我已经为此挣扎了一段时间,似乎找不到解决办法。 我有一个选择器,它显示大学术语列表。约束它不是问题所在。 我还有一张大学课程表。每门课程都需要附加一个特定的学期。 我已通过SelectedIndexChanged事件将SelectedItem设置为Terms表的属性。 在另一页上,我想显示上一页的SelectedItem以及该学期附带的大学课程列表。现在,新页面显示所有术语(名称更改为SelectedItem)和所有课程,无论它们附加到哪个术语(通过TermId) 我认为这需要通过使用内部联接的SQLite查询来完成,但我似乎无法设置ListView项以用于该查询的结果(即使使用Sqlite 选择器SelectedItem和两个不同的DB表,sqlite,xamarin,Sqlite,Xamarin,我已经为此挣扎了一段时间,似乎找不到解决办法。 我有一个选择器,它显示大学术语列表。约束它不是问题所在。 我还有一张大学课程表。每门课程都需要附加一个特定的学期。 我已通过SelectedIndexChanged事件将SelectedItem设置为Terms表的属性。 在另一页上,我想显示上一页的SelectedItem以及该学期附带的大学课程列表。现在,新页面显示所有术语(名称更改为SelectedItem)和所有课程,无论它们附加到哪个术语(通过TermId) 我认为这需要通过使用内部联接的
ToList();
),甚至不确定我是否应该这样做
我还考虑创建一个新表,并将查询的值插入该表中并以这种方式绑定它
关于实现这一目标的最佳方法有什么建议吗
术语表:
public class Terms
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string TermName { get; set; }
public string TermStatus { get; set; }
public DateTime TProjStart { get; set; }
public DateTime TProjEnd { get; set; }
public DateTime TActStart { get; set; }
public DateTime TActEnd { get; set; }
public string Pick { get; set; }
}
课程表:
public class Courses
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }
public string CourseName { get; set; }
public string CourseStatus { get; set; }
public DateTime CourseStart { get; set; }
public DateTime CourseEnd { get; set; }
public string InstructName { get; set; }
public string InstructEmail { get; set; }
public string InstructPhone { get; set; }
public string Notes { get; set; }
public int TermId { get; set; }
}
TermId应该引用Terms.Id作为一种foreignkey,但我似乎无法实际将其设置为foreignkey,因此我认为可能需要手动设置它。
选择器SelectedIndexChanged事件:
public void termPicker_SelectedIndexChanged(object sender, EventArgs e)
{
using (SQLiteConnection conn = new SQLiteConnection(App.DatabaseLocation))
{
var pick = (Terms)termPicker.SelectedItem;
if (termPicker.SelectedItem != null)
{
conn.Execute($"UPDATE Terms SET Pick ='{pick.TermName}'");
}
else
{
var refresh = new Page1();
Navigation.InsertPageBefore(refresh, this);
Navigation.PopAsync();
}
现在只需要找出一种只显示所附课程的方法
到所选的术语
var courses=db.Table()。其中(c=>c.TermId==selectedTerm.ToList();
选取者是否应该只过滤下一页上显示的项目?如果是这样,那么您不应该将所选项目的值传递到下一页吗?我不明白执行更新的目的是什么?@Jason我的目的是将术语表Pick属性更新到SelectedItem。然后从下一页开始年龄在标签绑定中使用该属性。至于如何传递SelectedItem,我不完全确定,因此我将做一些研究。但是,我仍然需要找到一种方法将课程附加到学期。我不确定是否将courses.TermId设置为term.Id,或者甚至如何按TermId显示这些课程。@Jason Ok w可以传递值,并且显示正确。现在只需要找出一种方法,只显示所选术语的附加课程。谢谢!这似乎是可行的。它会像预期的那样拉取附加到术语的所有课程的列表(我确实需要稍微修改var courses=db.Table().ToList()。其中(c=>c.TermId==terms.Id);
但是,我似乎无法提取特定的列(例如CourseName)来自该列表。感谢您的帮助!我会继续查找!课程
应该是一个列表
,因此您应该能够访问列表中任何单个项目的属性。我似乎无法获取它。我可以将课程设置为listview项目源没有问题,但它只显示名称空间和模型。但是,然后尝试将标签设置为CourseName using courseText.Text=courses.CourseName;'返回一个CourseName not found错误。我尝试将其从“.Where”设置为“.to”.String”,并且只得到true或false。courses
是一个课程列表,因此它没有CourseName属性。只有列表中的单个项目具有CourseName属性。好的,因此我需要先指定索引,然后n CourseName属性。类似于'courseText.Text=courses.[0].CourseName;'或对于列表中的每个项目,使用foreach语句获取所有项目和CourseName属性?
var courses = db.Table<Courses>().Where(c => c.TermId == selectedTerm).ToList();