C# 如何让用户在Xamarin C中编辑他们的输入#
我正在制作一个提醒应用程序,我希望用户能够编辑他们的提醒 此时,当用户编辑提醒时,它会编辑提醒列表中的所有提醒,如下所示: 以下是我的代码的一些部分:C# 如何让用户在Xamarin C中编辑他们的输入#,c#,xamarin.android,C#,Xamarin.android,我正在制作一个提醒应用程序,我希望用户能够编辑他们的提醒 此时,当用户编辑提醒时,它会编辑提醒列表中的所有提醒,如下所示: 以下是我的代码的一些部分: namespace ReminderApp.Models { public class Reminder { public int Id { get; set; } public string Date { get; set; } public string Time { get;
namespace ReminderApp.Models
{
public class Reminder
{
public int Id { get; set; }
public string Date { get; set; }
public string Time { get; set; }
public string Note { get; set; }
public Reminder()
{
}
}
}
我的数据库:
using Android.Content;
using Android.Database.Sqlite;
namespace ReminderApp.HelperRepository
{
public class DataStore : SQLiteOpenHelper
{
private static string _DatabaseName = "reminderDB.db";
public DataStore(Context context) : base(context, _DatabaseName, null, 1)
{
}
public override void OnCreate(SQLiteDatabase db)
{
db.ExecSQL(ReminderHelper.CreateQuery);
}
public override void OnUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.ExecSQL(ReminderHelper.DeleteQuery);
OnCreate(db);
}
}
}
用于删除更新和添加提醒的My database helper:
using System;
using System.Collections.Generic;
using Android.Content;
using Android.Database.Sqlite;
using ReminderApp.Models;
using Android.Database;
namespace ReminderApp.HelperRepository
{
public class ReminderHelper
{
private const string TableName = "reminderTable";
private const string ColumnID = "Id";
private const string ColumnDate = "Date";
private const string ColumnTime = "Time";
private const string ColumnNote = "Note";
public const string CreateQuery = "CREATE TABLE " + TableName + " ( "
+ ColumnID + " INTEGER PRIMARY KEY,"
+ ColumnDate + " TEXT,"
+ ColumnTime + " TEXT,"
+ ColumnNote + " TEXT)";
public const string DeleteQuery = "DROP TABLE IF EXISTS " + TableName;
public ReminderHelper()
{
}
public static void InsertReminderData(Context context, Reminder reminder)
{
SQLiteDatabase db = new DataStore(context).WritableDatabase;
ContentValues contentValues = new ContentValues();
contentValues.Put(ColumnDate, reminder.Date);
contentValues.Put(ColumnTime, reminder.Time);
contentValues.Put(ColumnNote, reminder.Note);
db.Insert(TableName, null, contentValues);
db.Close();
}
public static void EditReminderData(Context context, Reminder reminder)
{
SQLiteDatabase db = new DataStore(context).WritableDatabase;
ContentValues contentValues = new ContentValues();
contentValues.Put(ColumnDate, reminder.Date);
contentValues.Put(ColumnTime, reminder.Time);
contentValues.Put(ColumnNote, reminder.Note);
db.Update(TableName, contentValues, null, null);
db.Close();
}
public static List<Reminder> GetReminderList(Context context)
{
List<Reminder> reminder = new List<Reminder>();
SQLiteDatabase db = new DataStore(context).ReadableDatabase;
string[] columns = new string[] { ColumnID, ColumnDate, ColumnTime, ColumnNote };
using (ICursor cursor = db.Query(TableName, columns, null, null, null, null, null))
{
while (cursor.MoveToNext())
{
reminder.Add(new Reminder
{
Id = cursor.GetInt(cursor.GetColumnIndexOrThrow(ColumnID)),
Date = cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnDate)),
Time = cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnTime)),
Note = cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnNote))
});
}
}
db.Close();
return reminder;
}
public static void DeleteReminder(Context context, Reminder reminder)
{
SQLiteDatabase db = new DataStore(context).WritableDatabase;
db.Delete(TableName, ColumnDate + "=? AND " + ColumnTime + "=? OR " + ColumnID + "=" + reminder.Id, new string[] { reminder.Date, reminder.Time });
db.Close();
}
public static Reminder SelectReminder(Context context)
{
Reminder reminder;
SQLiteDatabase db = new DataStore(context).WritableDatabase;
string[] columns = new string[] { ColumnID, ColumnDate, ColumnTime, ColumnNote };
string datetime = DateTime.Now.ToString();
string[] dt = datetime.Split(' ');
var date = dt[0];
var tt = dt[1].Split(':');
var time = tt[0] + ":" + tt[1] + " " + dt[2];
using (ICursor cursor = db.Query(TableName, columns, ColumnDate + "=? AND " + ColumnTime + "=?", new string[] { date, time }, null, null, null))
{
if (cursor.MoveToNext())
{
reminder = new Reminder
{
Id = cursor.GetInt(cursor.GetColumnIndexOrThrow(ColumnID)),
Date = cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnDate)),
Time = cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnTime)),
Note = cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnNote))
};
}
else
{
reminder = null;
}
}
return reminder;
}
}
}
使用系统;
使用System.Collections.Generic;
使用Android.Content;
使用Android.Database.Sqlite;
使用ReminderApp.Models;
使用Android.Database;
命名空间提醒App.HelperRepository
{
公共类提醒帮助器
{
private const string TableName=“提醒表”;
private const string ColumnID=“Id”;
private const string ColumnDate=“日期”;
private const string ColumnTime=“Time”;
private const string ColumnNote=“Note”;
public const string CreateQuery=“创建表”+表名+”(“
+ColumnID+“整数主键,”
+ColumnDate+“文本,”
+ColumnTime+“文本,”
+栏注+“正文”;
public const string DeleteQuery=“如果存在,则删除表”+表名;
公共提醒帮助者()
{
}
公共静态void insertrementerdata(上下文上下文,提醒)
{
SQLiteDatabase db=新数据存储(上下文).WritableDatabase;
ContentValues ContentValues=新ContentValues();
contentValues.Put(ColumnDate、remention.Date);
contentValues.Put(ColumnTime、remention.Time);
contentValues.Put(ColumnNote、rementer.Note);
插入(TableName,null,contentValues);
db.Close();
}
公共静态void editMemberData(上下文上下文、提醒)
{
SQLiteDatabase db=新数据存储(上下文).WritableDatabase;
ContentValues ContentValues=新ContentValues();
contentValues.Put(ColumnDate、remention.Date);
contentValues.Put(ColumnTime、remention.Time);
contentValues.Put(ColumnNote、rementer.Note);
Update(TableName,contentValues,null,null);
db.Close();
}
公共静态列表GetMemberList(上下文)
{
列表提醒=新建列表();
SQLiteDatabase db=新数据存储(上下文).ReadableDatabase;
字符串[]列=新字符串[]{ColumnID、ColumnDate、ColumnTime、ColumnNote};
使用(ICursor cursor=db.Query(TableName,columns,null,null,null,null))
{
while(cursor.MoveToNext())
{
提醒。添加(新提醒)
{
Id=cursor.GetInt(cursor.GetColumnIndexOrThrow(ColumnID)),
日期=cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnDate)),
时间=cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnTime)),
注意=cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnNote))
});
}
}
db.Close();
退货提醒;
}
公共静态无效删除提醒(上下文上下文,提醒)
{
SQLiteDatabase db=新数据存储(上下文).WritableDatabase;
db.Delete(TableName,ColumnDate+“=”和“+ColumnTime+”=”或“+ColumnID+“=”+rements.Id,新字符串[]{rements.Date,rements.Time});
db.Close();
}
公共静态提醒选择提醒(上下文)
{
提醒;
SQLiteDatabase db=新数据存储(上下文).WritableDatabase;
字符串[]列=新字符串[]{ColumnID、ColumnDate、ColumnTime、ColumnNote};
字符串datetime=datetime.Now.ToString();
字符串[]dt=datetime.Split(“”);
var日期=dt[0];
var tt=dt[1]。拆分(“:”);
var time=tt[0]+”:“+tt[1]+”“+dt[2];
使用(ICursor cursor=db.Query(TableName,columns,ColumnDate+“=”和“+ColumnTime+”=?”,新字符串[]{date,time},null,null,null))
{
if(cursor.MoveToNext())
{
提醒=新提醒
{
Id=cursor.GetInt(cursor.GetColumnIndexOrThrow(ColumnID)),
日期=cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnDate)),
时间=cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnTime)),
注意=cursor.GetString(cursor.GetColumnIndexOrThrow(ColumnNote))
};
}
其他的
{
提醒=null;
}
}
退货提醒;
}
}
}
如何更改代码,以便只编辑用户要编辑的提醒
感谢您的帮助
编辑 谢谢@jai的帮助 但现在我有另一个问题,当我选择编辑提醒时,所有字段在开始时都是空白的。像这样: 但是,我希望在按“编辑”时更像这样: 当我把
\u dateDisplay=(EditText)“remention.Date”
放在如下位置时:
我收到一个错误“对象引用未设置为对象上的瞬间”
如果您需要,这是我的完整申请表:
再次感谢您的帮助 您必须将列表活动中选定对象的Id传递给要更新的编辑活动 列表提醒.cs
private void List_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
AlertDialog alert = dialog.Create();
alert.SetTitle("Edit or Delete?");
alert.SetMessage("Would you like to edit your reminder or delete it?");
alert.SetIcon(Resource.Drawable.image_2020_09_29T09_45_02_165Z);
alert.SetButton("Delete", (c, ev) =>
{
AlertDialog.Builder dialog2 = new AlertDialog.Builder(this);
AlertDialog alert2 = dialog2.Create();
alert2.SetTitle("Delete Reminder");
alert2.SetMessage("Are you sure!");
alert2.SetIcon(Resource.Drawable.Screenshot_2020_11_11_at_4_57_02_PM);
alert2.SetButton("yes", (c, ev) =>
{
TextView _txtLabel;
reminder = listitem[e.Position];
ReminderHelper.DeleteReminder(this,reminder);
_txtLabel = FindViewById<TextView>(Resource.Id.txt_label);
StartActivity(new Intent(this, typeof(ListReminder)));
Toast.MakeText(this, "Deleted Sucessfully!", ToastLength.Short).Show();
GC.Collect();
});
alert2.SetButton2("no", (c, ev) => { });
alert2.Show();
});
alert.SetButton2("Edit", (c, ev) =>
{
var intent = new Intent(this, typeof(EditActivity));
intent.PutExtra("Id", listitem[e.Position].Id);
StartActivity(intent);
});
alert.SetButton3("Cancel", (c, ev) => { });
alert.Show();
}
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main);
reminder = new Reminder();
var id = Intent.GetIntExtra("Id", 0);
if (id != 0)
reminder.Id = id;
_dateDisplay = FindViewById<EditText>(Resource.Id.date_display);
_timeDisplay = FindViewById<EditText>(Resource.Id.time_display);
_txtNote = FindViewById<EditText>(Resource.Id.txtNote);
_saveButton = FindViewById<Button>(Resource.Id.save);
_btnList = FindViewById<Button>(Resource.Id.btnList);
_dateDisplay.Click += DateSelect_OnClick;
_timeDisplay.Click += TimeSelectOnClick;
_saveButton.Click += SaveRecords;
_btnList.Click += (sender, e) => {
StartActivity(new Intent(this, typeof(ListReminder)));
};
}
public static void EditReminderData(Context context, Reminder reminder)
{
SQLiteDatabase db = new DataStore(context).WritableDatabase;
ContentValues contentValues = new ContentValues();
contentValues.Put(ColumnDate, reminder.Date);
contentValues.Put(ColumnTime, reminder.Time);
contentValues.Put(ColumnNote, reminder.Note);
db.Update(TableName, contentValues, ColumnID + "=" + reminder.Id, null);
db.Close();
}
您必须将列表活动中选定对象的Id传递给要更新的编辑活动 列表提醒.cs
private void List_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
AlertDialog alert = dialog.Create();
alert.SetTitle("Edit or Delete?");
alert.SetMessage("Would you like to edit your reminder or delete it?");
alert.SetIcon(Resource.Drawable.image_2020_09_29T09_45_02_165Z);
alert.SetButton("Delete", (c, ev) =>
{
AlertDialog.Builder dialog2 = new AlertDialog.Builder(this);
AlertDialog alert2 = dialog2.Create();
alert2.SetTitle("Delete Reminder");
alert2.SetMessage("Are you sure!");
alert2.SetIcon(Resource.Drawable.Screenshot_2020_11_11_at_4_57_02_PM);
alert2.SetButton("yes", (c, ev) =>
{
TextView _txtLabel;
reminder = listitem[e.Position];
ReminderHelper.DeleteReminder(this,reminder);
_txtLabel = FindViewById<TextView>(Resource.Id.txt_label);
StartActivity(new Intent(this, typeof(ListReminder)));
Toast.MakeText(this, "Deleted Sucessfully!", ToastLength.Short).Show();
GC.Collect();
});
alert2.SetButton2("no", (c, ev) => { });
alert2.Show();
});
alert.SetButton2("Edit", (c, ev) =>
{
var intent = new Intent(this, typeof(EditActivity));
intent.PutExtra("Id", listitem[e.Position].Id);
StartActivity(intent);
});
alert.SetButton3("Cancel", (c, ev) => { });
alert.Show();
}
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.activity_main);
reminder = new Reminder();
var id = Intent.GetIntExtra("Id", 0);
if (id != 0)
reminder.Id = id;
_dateDisplay = FindViewById<EditText>(Resource.Id.date_display);
_timeDisplay = FindViewById<EditText>(Resource.Id.time_display);
_txtNote = FindViewById<EditText>(Resource.Id.txtNote);
_saveButton = FindViewById<Button>(Resource.Id.save);
_btnList = FindViewById<Button>(Resource.Id.btnList);
_dateDisplay.Click += DateSelect_OnClick;
_timeDisplay.Click += TimeSelectOnClick;
_saveButton.Click += SaveRecords;
_btnList.Click += (sender, e) => {
StartActivity(new Intent(this, typeof(ListReminder)));
};
}
public static void EditReminderData(Context context, Reminder reminder)
{
SQLiteDatabase db = new DataStore(context).WritableDatabase;
ContentValues contentValues = new ContentValues();
contentValues.Put(ColumnDate, reminder.Date);
contentValues.Put(ColumnTime, reminder.Time);
contentValues.Put(ColumnNote, reminder.Note);
db.Update(TableName, contentValues, ColumnID + "=" + reminder.Id, null);
db.Close();
}
谢谢@jai现在工作!但是你知道我怎样才能在用户编辑之前得到提醒的“日期”、“时间”和“备注”吗