2016-10-26 8 views
2

フォーム私のリストの項目ですが、それが更新になると何も印刷されず、エラーも発生しません。私はまた、非同期メソッドを試してみましたが、あなたは、あなたが最初のデータベースから元のエントリを取得する必要があります更新したいので、それはXamarinは、私はnugetパッケージ<a href="https://github.com/oysteinkrog/SQLite.Net-PCL" rel="nofollow">sqlite-net-pcl</a>をインストールしていると私は、ボタン上のテキストに応じて、挿入または更新するSQLiteの更新

おかげ

答えて

3

を動作しませんでした。これで、Idフィールド(またはモデルでの呼び方)が入力されないため、更新する項目がわかりません。

コードを更新して、このようなことをしてください。注意:モデルの詳細とSQLiteの関連知識が不足しているため、これは疑似コードです。

SQLiteConnection database = DependencyService.Get<ISQLite>().GetConnection(); 
database.CreateTable<Announcement>(); 
var announcement = new Announcement { AnnouncementTitle = Title, AnnouncementDate = Date, AnnouncementText = Message }; 
if (text == "Save") { 
    if (database.Insert(announcement) != -1) { 
     System.Diagnostics.Debug.WriteLine("INSERTED"); 
    } 

} 
else { 
    var announcementToUpdate = database.Query<Customer>($"SELECT * FROM Announcement WHERE Id = '{originalId}'"). 

    // update your 'announcementToUpdate' object with new values here 

    if (database.Update(announcementToUpdate) > 0) { 
     System.Diagnostics.Debug.WriteLine("UPDATED"); 
    } 
} 

originalIdは、編集しようとしているIDのアナウンスで変数にする必要があります。

ここで重要なのは、データベースからレコードを最初に取得する必要があることです。 または更新するレコードのIdで新しいオブジェクトを作成します。

+0

私はこのエラーを受け取ります:System.NotSupportedException:List'1を更新することができません:それは発表が削除しようとしているPKを持っていないhavinh id = 1:var announcementToUpdate = database.Query $ "発表からの選択* WHERE AnnouncementId = '{1}'"); – Mireille

+0

モデルには主キーがありません。指定することをお勧めします。ドキュメントについては[こちら](https://components.xamarin.com/gettingstarted/sqlite-net)を参照してください。 –

+0

はい:[PrimaryKey、AutoIncrement] public int AnnouncementId {get;セット; } – Mireille

3

あなたのデータベースに独自のオブジェクトを識別するために

[PrimaryKey, AutoIncrement] 
public int Id { get; set; } 

のようなあなたのオブジェクトの発表の主キーまたはIDが必要です。

コードでは、常にIDのない新しいオブジェクトを作成します。 SQLiteそれはあなたのためのデータベース内の新しいIDを作成して参照してください。しかし、IDが空でない場合、更新は機能しません。

更新する場合は、正しいIDでデータベースから読み込む必要があります。編集して更新することができます。

+0

あなたの答えをありがとう、私は私のテーブルにIDがあります私はそれを取得しようとします – Mireille

関連する問題