我现在正在使用SQLite在WPF上开展一个关于学校的小项目。我有一个包含以下字段的SQLite表:id
(主键),name
,sex
,station
,job
和date
。我的DataGrid
sex
,station
和job
为ComboBox
。当我在ObservableCollection
中保存表格中的数据时,DataGrid
中的数据加载效果很好。我现在的问题是当我想修改SQLite表中DataGrid
的值时。任何想法都会很好。
这是我到目前为止所尝试的内容。
public SQLiteConnection m_db = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
SQLiteDataAdapter adap;
DataSet ds;
DataTable dt;
SQLiteCommandBuilder cmdbl;
string Query;
public MainWindow()
{
InitializeComponent();
dataGrid.ItemsSource = Userss.GetValues();
ds = new DataSet();
dataGrid.BeginInit();
ds.Tables.Add(CreateTable());
dataGrid.DataContext = ds.Tables[0];
dataGrid.EndInit();
}
public DataTable CreateTable()
{
m_db.Open();
Query = "Select * from user";
adap = new SQLiteDataAdapter(Query, m_db);
dt = new DataTable();
adap.Fill(dt);
m_db.Close();
return dt;
}
private void Update_Click(object sender, RoutedEventArgs e)
{
if (MessageBox.Show("Are you sure you want to make those changes?", "Please confirm", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
{
try
{
dt = dataGrid.DataContext as DataTable;
cmdbl = new SQLiteCommandBuilder(adap);
adap.Update(dt);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
else
this.dataGrid.CancelEdit();
}
当我按下Update
按钮时,数据库表保持不变。
ObservableCollection
效果很好。
来自用户类的函数getValues()
public static ObservableCollection<Userss> GetValues()
{
m_dd.Open();
string sql = "select * from user";
userCol.Clear();
SQLiteCommand cmd = new SQLiteCommand(sql, m_dd);
SQLiteDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
string sex1 = reader["sex"].ToString();
string station1 = reader["station"].ToString();
string job1 = reader["job"].ToString();
string data1 = reader["date"].ToString();
userCol.Add(new Userss()
{
Id = Convert.ToInt32(reader["id"]),
Name = reader["name"].ToString(),
Sex = (Sex)Enum.Parse(typeof(Sex), sex1),
Station = (Stations)Enum.Parse(typeof(Stations), station1),
Job = (Jobs)Enum.Parse(typeof(Jobs), job1),
Date = Convert.ToDateTime(data1)
});
}
m_dd.Close();
return userCol;
}