如何使用数据网格中的按钮更新数据表?

时间:2016-11-16 10:10:07

标签: c# wpf sqlite wpfdatagrid crud

我现在正在使用SQLite在WPF上开展一个关于学校的小项目。我有一个包含以下字段的SQLite表:id(主键),namesexstationjobdate 。我的DataGrid sexstationjobComboBox。当我在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;

        }

0 个答案:

没有答案