我在读取sqlite时遇到问题,即表中的数据无法读取(但读取的数据量),如下图所示:
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;
}
}
如何解决?
答案 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_dict
和id
。
但是,在word
课程中,属性为translation
,ind_dict
和Id
。使用 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中。