2016-05-04 3 views
0

を読み取ることができません。 enter image description hereは、テーブル内のデータを読み取ることができません(ただし、データの量が読んで)、すなわち、以下に示すように、私は、sqliteのを読んで問題を抱えているの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> 

ノート:私は言葉のテキスト=「言葉」と翻訳文のsqlite見やすく上のデータかどうかをテストする=「翻訳」を使用 上記のXAML。結合データの使用が読めないままであるが

コード:

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クラス:

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

投稿コードを使用する際に例外がありますか? 'InstalledLocation'は読み込み専用の場所なので、SQLiteファイルを扱うには' LocalFolder'のようなフォルダに置く方がいいでしょう。 –

+0

例外は表示されず、sqliteファイルのデータのみが表示されません。 上記のように結果が表示されます。私はを使ってテストしようとしています。 およびを使用している場合、表示されるデータは空です。 – Rose

+0

自分のコードでテストしました。しかし、私は 'System.MissingMethodException'に遭遇し、 追加情報は 'Constructor on type 'です。ind_dict 'が見つかりません。この問題を解決するために 'public ind_dict(){}'のような 'ind_dict'クラスにデフォルトのコンストラクタを追加します。この後、コードは正常に動作し、データが表示されます。 –

答えて

1

ここでの問題は、ind_dictクラスのプロパティが、kamus.sqliteデータベースのフィールド名と同じではないことです。

データベースでは、フィールド名はid,wordおよびtranslationです。
enter image description here

しかし、あなたのind_dictクラスでは、プロパティはIdWord、およびTranslationがあります。 SQLite.Net-PCLを使用する場合、クラスのプロパティは対応するテーブルのフィールド名と一致する必要があります。それ以外の場合は、プロパティを設定することができず、デフォルト値に設定されます。あなたの場合、プロパティの値はnullに設定され、タイプはstringです。したがって、あなたのページに表示されるデータはありません。

問題を解決するには、データベースのフィールド名またはind_dictクラスのプロパティを変更できます。ここでは例えばind_dictクラスのプロパティを変更:

ind_dict.csで

、次のようにプロパティを変更します。私たちはind_dictクラスのプロパティを変更したので、私たちはXAMLでDataTemplateを変更する必要もあり

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; 
    } 
} 

を:

<ListView.ItemTemplate> 
    <DataTemplate> 
     <Grid> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock FontSize="20" 
          Text="ID" 
          Visibility="Collapsed" /> 
       <TextBlock Margin="0,0,0,0" 
          FontSize="20" 
          FontWeight="SemiBold" 
          Text="{Binding word}" /> 
       <TextBlock Margin="30,0,0,0" 
          FontSize="20" 
          Text="{Binding translation}" /> 
      </StackPanel> 
      <Line Height="5" Stroke="#FFE6E6E6" /> 
     </Grid> 
    </DataTemplate> 
</ListView.ItemTemplate> 

この後、データはリストボックスに表示されます。

関連する問題