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

时间:2021-04-30 07:21:12

标签: mysql wpf entity-framework xaml mvvm

我正在尝试使用来自 MySQL 数据库的数据来训练 DATAGRID 的 LOAD、CUT、COPY、PASTE、DELETE、UPDATE、INSERT、UNDO、REDO 功能。 互联网上大多数可用的解决方案都使用实体框架,我想出于某些原因将其删除。 遇到的问题

  1. 加载函数在刚初始化时工作正常,但不适用于 CmdLoad 按钮控件。
  2. 我在使用 CmdSave 控件时遇到问题。数据库中没有反映任何更改。
  3. 如何使用其他功能 CUT、COPY、PASTE、DELETE、UNDO、REDO

模型

    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"); } } }
    }

查看 - XAML

    <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) { }
        }

    }

App.config

  <connectionStrings><add name="connscmag" connectionString="........." providerName="MySql.Data.MySqlClient"/></connectionStrings>

背后的代码

 public partial class eClrIdStdD : Window
    {
        private ClrIdVMD _mV;
        public eClrIdStdD()
        {
            InitializeComponent(); 
            _mV = new ClrIdVMD();DataContext = _mV;
        }
}

0 个答案:

没有答案