如何在不使用EntityFramework的情况下将datagrid数据保存回mysql数据库

如何在不使用EntityFramework的情况下将datagrid数据保存回mysql数据库,mysql,wpf,entity-framework,xaml,mvvm,Mysql,Wpf,Entity Framework,Xaml,Mvvm,我正在尝试使用MySQL数据库中的数据加载、剪切、复制、粘贴、删除、更新、插入、撤消和重做功能来训练DATAGRID。 internet上大多数可用的解决方案都使用实体框架,出于某些原因,我希望消除实体框架。 遇到的问题 加载函数在刚初始化时可以正常工作,但不适用于CmdLoad按钮控件 我对CmdSave控件有问题。数据库中未反映任何更改 如何进行其他功能剪切、复制、粘贴、删除、撤消、重做 型号 public class ClrIdM : INotifyPropertyChanged

我正在尝试使用MySQL数据库中的数据加载、剪切、复制、粘贴、删除、更新、插入、撤消和重做功能来训练DATAGRID。 internet上大多数可用的解决方案都使用实体框架,出于某些原因,我希望消除实体框架。 遇到的问题

  • 加载函数在刚初始化时可以正常工作,但不适用于
    CmdLoad
    按钮控件
  • 我对
    CmdSave
    控件有问题。数据库中未反映任何更改
  • 如何进行其他功能剪切、复制、粘贴、删除、撤消、重做
  • 型号

        public class ClrIdM : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
            protected void RaisePropertyChangedEvent(string propertyName) { if (PropertyChanged != null) { var e = new PropertyChangedEventArgs(propertyName); PropertyChanged(this, e); } }
    
            private string _Find,_sId,_sFirstName,_sLastName;
            public string Find { get { return _Find; } set { if (_Find != value) { _Find = value; RaisePropertyChangedEvent("Find"); } } }
    
            public string sId { get { return _sId; } set { if (_sId != value) { _sId = value; RaisePropertyChangedEvent("sId"); } } }
            public string sFirstName { get { return _sFirstName; } set { if (_sFirstName != value) { _sFirstName = value; RaisePropertyChangedEvent("sFirstName"); } } }
            public string sLastName { get { return _sLastName; } set { if (_sLastName != value) { _sLastName = value; RaisePropertyChangedEvent("sLastName"); } } }
        }
    
        <DataGrid Grid.Row="3" ItemsSource="{Binding MMs}" SelectedItem="{Binding SelectedItem}" >
            <DataGrid.Columns>
                <DataGridTextColumn x:Name="ID" Header="ID" Binding="{Binding sId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                <DataGridTextColumn x:Name="FIRST_NAME" Header="FIRST NAME" Binding="{Binding sFirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                 <DataGridTextColumn x:Name="LAST_NAME" Header="LAST NAME" Binding="{Binding sLastName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
            </DataGrid.Columns>
        </DataGrid>
        <Button Content="Load" Command="{Binding CmdLoad}" />
        <Button Content="Save" Command="{Binding CmdSave}" />
    
    
        public class ClrIdVMD
        {
            MySqlConnection con; MySqlCommand cmd;
            MySqlDataAdapter da = new MySqlDataAdapter(); DataSet ds = new DataSet();
    
            public ObservableCollection<ClrIdM> MMs { get; set; }
    
            private ICommand cmdLoad, cmdSave;
            public ICommand CmdLoad { get { if (cmdLoad == null) cmdLoad = new RelayCommand(p => Load()); return cmdLoad; } }
            public ICommand CmdSave { get { if (cmdSave == null) cmdSave = new RelayCommand(p => Save()); return cmdSave; } }
    
            public void Edit() { var detVM = new ClrIdVMF(SelectedItem); var dets = new eClrEditStd(detVM); dets.ShowDialog(); }
            public void Load() { DG(); }
            public void Save() { Update(); }
    
            public ClrIdM SelectedItem { get; set; }
            public string sId { get; private set; }
            public object sFirstName { get; private set; }
    
            public ClrIdVMD() { Load(); }
    
            private void DG()
            {
                var connectionString = ConfigurationManager.ConnectionStrings["connscmag"].ConnectionString;
                try
                {
                    con = new MySqlConnection(connectionString); con.Open();
                    cmd = new MySqlCommand("select * from stdclr", con);
                    da = new MySqlDataAdapter(cmd);
                    da.Fill(ds, "stdclr");
    
                    if (MMs == null) MMs = new ObservableCollection<ClrIdM>();
    
                    foreach (DataRow dr in ds.Tables[0].Rows)
                    {
                        MMs.Add(new ClrIdM
                        {
                            sId = dr["Id1"].ToString(),
                            sFirstName = dr["sFirstName"].ToString(),
                            sLastName = dr["sLastName"].ToString(),
                        });
                    }
                }
                catch (MySqlException sx) {  }
                catch (Exception ex) {  }
                finally { ds = null; da.Dispose(); con.Close(); con.Dispose(); }
            }
    
            private void Update()
            {
                var connectionString = ConfigurationManager.ConnectionStrings["connscmag"].ConnectionString;
                try
                {
                    con = new MySqlConnection(connectionString); con.Open();
                    cmd = new MySqlCommand("UPDATE stdclr SET " +
                        "sFirstName = @sFirstName, " +
                        "sLastName = @sLastName " +
                        "WHERE ID1 = '" + sId + "' ", con);
                    cmd.Parameters.AddWithValue("@sFirstName", sFirstName); 
                    cmd.Parameters.AddWithValue("@sLastName", sLastName); 
                    cmd.ExecuteNonQuery(); con.Close();
                }
                catch (MySqlException sx) { }
                catch (Exception ex) { }
            }
    
        }
    
    查看-XAML

        public class ClrIdM : INotifyPropertyChanged
        {
            public event PropertyChangedEventHandler PropertyChanged;
            protected void RaisePropertyChangedEvent(string propertyName) { if (PropertyChanged != null) { var e = new PropertyChangedEventArgs(propertyName); PropertyChanged(this, e); } }
    
            private string _Find,_sId,_sFirstName,_sLastName;
            public string Find { get { return _Find; } set { if (_Find != value) { _Find = value; RaisePropertyChangedEvent("Find"); } } }
    
            public string sId { get { return _sId; } set { if (_sId != value) { _sId = value; RaisePropertyChangedEvent("sId"); } } }
            public string sFirstName { get { return _sFirstName; } set { if (_sFirstName != value) { _sFirstName = value; RaisePropertyChangedEvent("sFirstName"); } } }
            public string sLastName { get { return _sLastName; } set { if (_sLastName != value) { _sLastName = value; RaisePropertyChangedEvent("sLastName"); } } }
        }
    
        <DataGrid Grid.Row="3" ItemsSource="{Binding MMs}" SelectedItem="{Binding SelectedItem}" >
            <DataGrid.Columns>
                <DataGridTextColumn x:Name="ID" Header="ID" Binding="{Binding sId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                <DataGridTextColumn x:Name="FIRST_NAME" Header="FIRST NAME" Binding="{Binding sFirstName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                 <DataGridTextColumn x:Name="LAST_NAME" Header="LAST NAME" Binding="{Binding sLastName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
            </DataGrid.Columns>
        </DataGrid>
        <Button Content="Load" Command="{Binding CmdLoad}" />
        <Button Content="Save" Command="{Binding CmdSave}" />
    
    
        public class ClrIdVMD
        {
            MySqlConnection con; MySqlCommand cmd;
            MySqlDataAdapter da = new MySqlDataAdapter(); DataSet ds = new DataSet();
    
            public ObservableCollection<ClrIdM> MMs { get; set; }
    
            private ICommand cmdLoad, cmdSave;
            public ICommand CmdLoad { get { if (cmdLoad == null) cmdLoad = new RelayCommand(p => Load()); return cmdLoad; } }
            public ICommand CmdSave { get { if (cmdSave == null) cmdSave = new RelayCommand(p => Save()); return cmdSave; } }
    
            public void Edit() { var detVM = new ClrIdVMF(SelectedItem); var dets = new eClrEditStd(detVM); dets.ShowDialog(); }
            public void Load() { DG(); }
            public void Save() { Update(); }
    
            public ClrIdM SelectedItem { get; set; }
            public string sId { get; private set; }
            public object sFirstName { get; private set; }
    
            public ClrIdVMD() { Load(); }
    
            private void DG()
            {
                var connectionString = ConfigurationManager.ConnectionStrings["connscmag"].ConnectionString;
                try
                {
                    con = new MySqlConnection(connectionString); con.Open();
                    cmd = new MySqlCommand("select * from stdclr", con);
                    da = new MySqlDataAdapter(cmd);
                    da.Fill(ds, "stdclr");
    
                    if (MMs == null) MMs = new ObservableCollection<ClrIdM>();
    
                    foreach (DataRow dr in ds.Tables[0].Rows)
                    {
                        MMs.Add(new ClrIdM
                        {
                            sId = dr["Id1"].ToString(),
                            sFirstName = dr["sFirstName"].ToString(),
                            sLastName = dr["sLastName"].ToString(),
                        });
                    }
                }
                catch (MySqlException sx) {  }
                catch (Exception ex) {  }
                finally { ds = null; da.Dispose(); con.Close(); con.Dispose(); }
            }
    
            private void Update()
            {
                var connectionString = ConfigurationManager.ConnectionStrings["connscmag"].ConnectionString;
                try
                {
                    con = new MySqlConnection(connectionString); con.Open();
                    cmd = new MySqlCommand("UPDATE stdclr SET " +
                        "sFirstName = @sFirstName, " +
                        "sLastName = @sLastName " +
                        "WHERE ID1 = '" + sId + "' ", con);
                    cmd.Parameters.AddWithValue("@sFirstName", sFirstName); 
                    cmd.Parameters.AddWithValue("@sLastName", sLastName); 
                    cmd.ExecuteNonQuery(); con.Close();
                }
                catch (MySqlException sx) { }
                catch (Exception ex) { }
            }
    
        }