На всякий случай добавлю, что я использую БД MySQL и MySQLConnector NET v.6.2.2 Весь код программы:
| Код | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Data.Common;
namespace WorkBook { //Код формы public partial class MainFrm : Form {
SQLEngine sql; DataSet ds; BindingSource bs; String MainTable = "Partners";
public MainFrm() { InitializeComponent(); }
private void MainFrm_Load(object sender, EventArgs e) { sql = new SQLEngine("SERVER=localhost; DATABASE=rs_AddressBook; UID=workbook; PASSWORD=123; Character Set=utf8", "SELECT id, Name, Address, Phone, Contract FROM Partners ORDER BY name"); ds = new DataSet();
UpdateDataSet();
ds.Tables[0].Columns[0].AutoIncrement = true; ds.Tables[0].Columns[0].AutoIncrementSeed = GetLastIndex(); ds.Tables[0].Columns[0].AutoIncrementStep = 1;
bs = new BindingSource(ds, "Partners");
dgvPartnersList.AutoGenerateColumns = false; dgvPartnersList.DataSource = bs; DataGridViewColumn column = new DataGridViewTextBoxColumn(); column.DataPropertyName = "Name"; column.Name = "Наименование"; column.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; dgvPartnersList.Columns.Add(column);
txName.DataBindings.Add("Text", bs, "Name"); txAddress.DataBindings.Add("Text", bs, "Address"); txPhone.DataBindings.Add("Text", bs, "Phone"); txContract.DataBindings.Add("Text", bs, "Contract"); }
private void btnExit_Click(object sender, EventArgs e) { Application.Exit(); }
private void btnSave_Click(object sender, EventArgs e) { bs.EndEdit(); Save(); }
private void Save() { sql.Update(ds.GetChanges(),MainTable); }
//Получаем следующий порядковый номер ключевого поля public int GetLastIndex() { try { return Convert.ToInt32(ds.Tables["Partners"].Select(string.Empty, "id DESC")[0]["id"]) + 1; } catch (IndexOutOfRangeException) { return 1; } }
// Обращаемся к классу sql для перезаполнения грида private void UpdateDataSet() { sql.Fill(ref ds, MainTable); }
// Обработчик кнопки создания нового элемента private void btnNew_Click(object sender, EventArgs e) { ds.Tables[0].Columns[0].AutoIncrementSeed = GetLastIndex(); DataRow row = ds.Tables["Partners"].NewRow(); row["Name"] = "Новый элемент"; ds.Tables["Partners"].Rows.Add(row); dgvPartnersList.CurrentCell = dgvPartnersList.Rows[dgvPartnersList.Rows.Count - 1].Cells[0]; bs.EndEdit(); sql.Update(ds.GetChanges(), MainTable); ds.AcceptChanges(); }
// Обработчик кнопки удаления private void btnDelete_Click(object sender, EventArgs e) { if (MessageBox.Show("Вы уверены что хотите удалить элемент ?", "Предупреждение", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes) { dgvPartnersList.Rows.Remove(dgvPartnersList.CurrentRow); bs.EndEdit(); sql.Update(ds.GetChanges(), MainTable); ds.AcceptChanges(); } }
// При каждом клике на грид обновляем его private void dgvPartnersList_MouseDown(object sender, MouseEventArgs e) { UpdateDataSet(); } }
. . . using MySql.Data; using MySql.Data.MySqlClient;
// Класс для работы с mysql class SQLEngine { MySqlConnection cn; MySqlDataAdapter adapter; MySqlCommandBuilder cb;
public SQLEngine(string connectionString, string selectCmd) { cn = new MySqlConnection(connectionString); MySqlCommand cmd = new MySqlCommand(selectCmd, cn); adapter = new MySqlDataAdapter(cmd); adapter.SelectCommand = cmd; adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;
cb = new MySqlCommandBuilder(adapter); adapter.UpdateCommand = cb.GetUpdateCommand(); adapter.DeleteCommand = cb.GetDeleteCommand(); }
public void Fill(ref DataSet ds, string srcTable) { adapter.Fill(ds, srcTable); }
public void Update(DataSet d, string dstTable) { adapter.FillLoadOption = LoadOption.OverwriteChanges; adapter.Update(d,dstTable); } } }
|
|