如何在SQLite数据库中将唯一项显示为C#中的Picker

时间:2016-01-11 08:59:13

标签: c# sqlite xamarin xamarin.forms

我有一个作业,我在库存数据从SQLite数据库中的列填充到选择器这里是我的代码

来自数据库模型

public IEnumerable<SingleSignerTable> GetItemList()
{
    return _database.Query<SingleSignerTable>("SELECT * FROM [SingleSignerTable]");
}

从前端

lCategory = new Label
            {
                Text = "Category",
                FontAttributes = Font.SystemFontOfSize(5, FontAttributes.Bold).FontAttributes,
            };
lField = new Picker { Title = "Category", VerticalOptions = LayoutOptions.Start };

lField.SelectedIndexChanged += lSport_SelectedIndexChanged;

FieldOption = new List<string> { "Others", GetItemList()};
foreach (string option in FieldOption)
{
    lField.Items.Add(option);
};

private string GetItemList()
{
    foreach (string option in FieldOption)
    {
        lField.Items.Add(option);
    };
}

所以我可以举例说明

  

其他
      棒球
      足球
      排球
      拼字游戏
      WWE

在选择器端

但代码似乎无法正常工作

1 个答案:

答案 0 :(得分:0)

首先,您应该摆脱第二个/私有GetItemList方法。在发布时也不要将两种不同的方法命名为相同,这会让它变得混乱。我会将你的第二种方法重构为:

var items = GetItemList().ToList();
foreach (var item in items)
{
     lField.Items.Add(item.SomeStringPropertyOnSingleSignerTable);
};

var items = GetItemList().Select(x => x.SomeStringPropertyOnSingleSignerTable)
                         .Distinct()
                         .ToList();
foreach (string option in items)
{
    lField.Items.Add(option);
};

就错误而言,这是因为你的方法private string GetItemList()没有返回字符串,但是你声明它确实存在。如果方法GetItemList只返回一个字符串, 可能会返回IEnumerable<T>或某种类型的集合,我就不会命名它。