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