无法读取sqlite文件

时间:2016-05-04 05:43:59

标签: c# sqlite xaml uwp win-universal-app

我在读取sqlite时遇到问题,即表中的数据无法读取(但读取的数据量),如下图所示: enter image description here

XAML:

<ListBox x:Name="dictionary" Grid.Column="0" Grid.Row="1" Grid.ColumnSpan="2" HorizontalAlignment="Center" >
                <ListBox.ItemTemplate>

                    <DataTemplate>
                        <StackPanel Orientation="Horizontal">
                            <TextBlock FontSize="20" Text="{Binding Id}" Visibility="Collapsed"/>
                            <TextBlock FontSize="20" Text="{Binding Word}" FontWeight="SemiBold" Margin="30,0,0,0"/>
                            <TextBlock FontSize="20" Text="{Binding Translation}" FontWeight="SemiBold" Margin="30,0,0,0"/>
                        </StackPanel>
                    </DataTemplate>

                </ListBox.ItemTemplate>
            </ListBox>

请注意: 上面的XAML我用的是text =&#34; Word &#34;和翻译文本=&#34; 翻译&#34;测试sqlite上的数据是否清晰可读。虽然使用绑定数据仍然不可读

代码:

public ObservableCollection<ind_dict> ReadIndo()
        {
            var sqlpath = System.IO.Path.Combine(Package.Current.InstalledLocation.Path, @"Assets\kamus.sqlite");
            using (var dbConn = new SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), sqlpath))
            {
                List<ind_dict> myCollection = dbConn.Table<ind_dict>().ToList<ind_dict>();
                ObservableCollection<ind_dict> indoList = new ObservableCollection<ind_dict>(myCollection);
                dictionary.ItemsSource = indoList;
                return indoList;
            }

        }

ind_dict class:

public class ind_dict
        {
            [SQLite.Net.Attributes.PrimaryKey]
            public string Id { get; set; }
            public string Word { get; set; }
            public string Translation { get; set; }

            public ind_dict(string word, string translation)
            {
                Word = word;
                Translation = translation;
            }
        }

如何解决?

1 个答案:

答案 0 :(得分:1)

这里的问题是resignFirstResponder类中的属性与kamus.sqlite数据库中的字段名称不同。

在您的数据库中,字段名称为func searchBarCancelButtonClicked(searchBar: UISearchBar) { searchBar.text = "" searchBar.resignFirstResponder() // or you could force view to end editing mode using self.view.endEditing(true) } ind_dictid
enter image description here

但是,在word课程中,属性为translationind_dictId。使用 SQLite.Net-PCL 时,类中的属性必须与相应表中的字段名称匹配。否则,无法填充属性并将其设置为其默认值。在您的情况下,您的属性值将设置为Word,因为其类型为Translation。因此,您的页面上不会显示任何数据。

要解决您的问题,您可以更改数据库中的字段名称或null类中的属性。这里更改string类中的属性,例如:

在ind_dict.cs中,更改以下属性:

ind_dict

由于我们更改了ind_dict类中的属性,我们还需要更改XAML中的public class ind_dict { [SQLite.Net.Attributes.PrimaryKey] public string id { get; set; } public string word { get; set; } public string translation { get; set; } public ind_dict() { } public ind_dict(string w, string t) { word = w; translation = t; } }

ind_dict

此后,数据将显示在ListBox中。

相关问题