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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/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
Sqlite 选择器SelectedItem和两个不同的DB表_Sqlite_Xamarin - Fatal编程技术网

Sqlite 选择器SelectedItem和两个不同的DB表

Sqlite 选择器SelectedItem和两个不同的DB表,sqlite,xamarin,Sqlite,Xamarin,我已经为此挣扎了一段时间,似乎找不到解决办法。 我有一个选择器,它显示大学术语列表。约束它不是问题所在。 我还有一张大学课程表。每门课程都需要附加一个特定的学期。 我已通过SelectedIndexChanged事件将SelectedItem设置为Terms表的属性。 在另一页上,我想显示上一页的SelectedItem以及该学期附带的大学课程列表。现在,新页面显示所有术语(名称更改为SelectedItem)和所有课程,无论它们附加到哪个术语(通过TermId) 我认为这需要通过使用内部联接的

我已经为此挣扎了一段时间,似乎找不到解决办法。 我有一个选择器,它显示大学术语列表。约束它不是问题所在。 我还有一张大学课程表。每门课程都需要附加一个特定的学期。 我已通过SelectedIndexChanged事件将SelectedItem设置为Terms表的属性。 在另一页上,我想显示上一页的SelectedItem以及该学期附带的大学课程列表。现在,新页面显示所有术语(名称更改为SelectedItem)和所有课程,无论它们附加到哪个术语(通过TermId)

我认为这需要通过使用内部联接的SQLite查询来完成,但我似乎无法设置ListView项以用于该查询的结果(即使使用
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();