Dziękuję za opinie, mam nadzieje, że teraz kod jest bardziej przejrzysty. Proszę o komentarz co do poprawności, według mnie działa dobrze. Faktycznie zabrakło dataTable.AcceptChanges();. Przerzuciłem się jednak na SqlCommand mam nadzieję, że nie mam zbyt dużego bałaganu. Kod postaram się podzielić jak tylko poczytam jak tego dokonać :)
using System;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace Rozliczacz
{
public partial class Form1 : Form
{
private string connectionString = "Data Source=(LocalDB)\\MSSQLLocalDB;AttachDbFilename=" + Application.StartupPath + "\\Database1.mdf;Integrated Security=True";
private DataTable dataTable;
public Form1()
{
InitializeComponent();
LabelOtwierajacyFolderZeZrzutem.Visible = (LabelOtwierajacyFolderZeZrzutem.Text != "0");
LabelOtwierajacyPlikZeZrzutem.Visible = (LabelOtwierajacyPlikZeZrzutem.Text != "0");
PrzyciskWykonajZrzutEkranuTrybMin.Visible = false;
PrzyciskArchiwizujRekord.Visible = true;
PrzyciskPrzywrocRekord.Visible = false;
PrzyciskWyswietlBiezaceDane.BackColor = Color.FromArgb(84, 133, 224);
tableDataGridView.EnableHeadersVisualStyles = false;
tableDataGridView.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
tableDataGridView.Columns["DATA"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
tableDataGridView.Columns["RYSUNEK"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
tableDataGridView.Columns["CENASZTUKA"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
tableDataGridView.Columns["CENACALA"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
tableDataGridView.Columns["SZTUKI"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
tableDataGridView.Columns["KOMENTARZ"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
tableDataGridView.Columns["ARCHIWIZACJA"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
tableDataGridView.RowHeadersVisible = false;
}
private void Form1_Load(object sender, EventArgs e)
{
try
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("SELECT * FROM [Table] WHERE ARCHIWIZACJA = 0", connection))
{
SqlDataAdapter adapter = new SqlDataAdapter(command);
dataTable = new DataTable();
adapter.Fill(dataTable);
tableDataGridView.DataSource = dataTable;
decimal sum = 0;
foreach (DataRow row in dataTable.Rows)
{
if (row.RowState != DataRowState.Deleted)
{
decimal cenaCalosc = decimal.Parse(row["CENACALA"].ToString());
sum += cenaCalosc;
}
}
TextBoxLacznaNaleznosc.Text = sum.ToString();
}
}
}
catch (Exception ex)
{
MessageBox.Show("Wystąpił błąd podczas wczytywania danych: " + ex.Message, "Błąd");
}
}
private void PrzyciskDodajRekord_Click(object sender, EventArgs e)
{
TextBoxLacznaNaleznosc.Text = "0";
if (string.IsNullOrWhiteSpace(TextBoxNumerRysunku.Text) || string.IsNullOrWhiteSpace(TextBoxIloscWykonana.Text) || string.IsNullOrWhiteSpace(TextBoxCenaZaSztuke.Text) || string.IsNullOrWhiteSpace(TextBoxKomentarz.Text))
{
MessageBox.Show("Wszystkie pola muszą być wypełnione.", "Błąd");
return;
}
string numer_rysunku = TextBoxNumerRysunku.Text;
int ilosc_wykonana = int.Parse(TextBoxIloscWykonana.Text);
decimal cena_sztuka = decimal.Parse(TextBoxCenaZaSztuke.Text);
string komentarz = TextBoxKomentarz.Text;
decimal cena_calosc = ilosc_wykonana * cena_sztuka;
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("INSERT INTO [Table] (DATA, RYSUNEK, SZTUKI, CENASZTUKA, CENACALA, KOMENTARZ, ARCHIWIZACJA) VALUES (@Data, @Rysunek, @Sztuki, @CenaSztuka, @CenaCalosc, @Komentarz, @Archiwizacja); SELECT SCOPE_IDENTITY();", connection))
{
command.Parameters.AddWithValue("@Data", DateTime.Now);
command.Parameters.AddWithValue("@Rysunek", numer_rysunku);
command.Parameters.AddWithValue("@Sztuki", ilosc_wykonana);
command.Parameters.AddWithValue("@CenaSztuka", cena_sztuka);
command.Parameters.AddWithValue("@CenaCalosc", cena_calosc);
command.Parameters.AddWithValue("@Komentarz", komentarz);
command.Parameters.AddWithValue("@Archiwizacja", 0);
int newId = Convert.ToInt32(command.ExecuteScalar());
dataTable.Rows.Add(newId, DateTime.Now, numer_rysunku, ilosc_wykonana, cena_sztuka, cena_calosc, komentarz, 0);
}
}
decimal sum = 0;
foreach (DataRow row in dataTable.Rows)
{
if (row.RowState != DataRowState.Deleted)
{
decimal cenaCalosc = decimal.Parse(row["CENACALA"].ToString());
sum += cenaCalosc;
}
}
TextBoxLacznaNaleznosc.Text = sum.ToString();
}
private void PrzyciskKasujRekord_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show("Czy na pewno chcesz skasować rekord z bazy danych?", "Potwierdzenie", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
if (tableDataGridView.SelectedRows.Count > 0)
{
int selectedIndex = tableDataGridView.SelectedRows[0].Index;
DataRowView selectedRow = (DataRowView)tableDataGridView.SelectedRows[0].DataBoundItem;
int id = Convert.ToInt32(selectedRow["Id"]);
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("DELETE FROM [Table] WHERE Id = @Id", connection))
{
command.Parameters.AddWithValue("@Id", id);
command.ExecuteNonQuery();
}
}
dataTable.Rows.RemoveAt(selectedIndex);
decimal sum = 0;
foreach (DataRow row in dataTable.Rows)
{
if (row.RowState != DataRowState.Deleted)
{
decimal cenaCalosc = decimal.Parse(row["CENACALA"].ToString());
sum += cenaCalosc;
}
}
TextBoxLacznaNaleznosc.Text = sum.ToString();
}
}
else if (result == DialogResult.No)
{
return;
}
}
private void PrzyciskArchiwizujRekord_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show("Czy na pewno chcesz zarchiwizować rekord w bazie danych?", "Potwierdzenie", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
if (tableDataGridView.SelectedRows.Count > 0)
{
int selectedIndex = tableDataGridView.SelectedRows[0].Index;
DataRowView selectedRow = (DataRowView)tableDataGridView.SelectedRows[0].DataBoundItem;
int id = Convert.ToInt32(selectedRow["Id"]);
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("UPDATE [Table] SET ARCHIWIZACJA = 1 WHERE Id = @Id", connection))
{
command.Parameters.AddWithValue("@Id", id);
command.ExecuteNonQuery();
}
}
selectedRow["ARCHIWIZACJA"] = 1;
try
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("SELECT * FROM [Table] WHERE ARCHIWIZACJA = 0", connection))
{
SqlDataAdapter adapter = new SqlDataAdapter(command);
dataTable = new DataTable();
adapter.Fill(dataTable);
tableDataGridView.DataSource = dataTable;
decimal sum = 0;
foreach (DataRow row in dataTable.Rows)
{
if (row.RowState != DataRowState.Deleted)
{
decimal cenaCalosc = decimal.Parse(row["CENACALA"].ToString());
sum += cenaCalosc;
}
}
TextBoxLacznaNaleznosc.Text = sum.ToString();
}
}
}
catch (Exception ex)
{
MessageBox.Show("Wystąpił błąd podczas wczytywania danych: " + ex.Message, "Błąd");
}
}
}
else if (result == DialogResult.No)
{
return;
}
}
private void PrzyciskPrzywrocRekord_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show("Czy na pewno chcesz przywrócić zarchiwizowany rekord do bazy danych?", "Potwierdzenie", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
if (tableDataGridView.SelectedRows.Count > 0)
{
int selectedIndex = tableDataGridView.SelectedRows[0].Index;
DataRowView selectedRow = (DataRowView)tableDataGridView.SelectedRows[0].DataBoundItem;
int id = Convert.ToInt32(selectedRow["Id"]);
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("UPDATE [Table] SET ARCHIWIZACJA = 0 WHERE Id = @Id", connection))
{
command.Parameters.AddWithValue("@Id", id);
command.ExecuteNonQuery();
}
}
selectedRow["ARCHIWIZACJA"] = 0; // Zaktualizuj wartość ARCHIWIZACJA na 0 w obiekcie DataRowView
try
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("SELECT * FROM [Table] WHERE ARCHIWIZACJA = 1", connection))
{
SqlDataAdapter adapter = new SqlDataAdapter(command);
dataTable = new DataTable();
adapter.Fill(dataTable);
tableDataGridView.DataSource = dataTable;
decimal sum = 0;
foreach (DataRow row in dataTable.Rows)
{
if (row.RowState != DataRowState.Deleted)
{
decimal cenaCalosc = decimal.Parse(row["CENACALA"].ToString());
sum += cenaCalosc;
}
}
TextBoxLacznaNaleznosc.Text = sum.ToString();
}
}
}
catch (Exception ex)
{
MessageBox.Show("Wystąpił błąd podczas wczytywania danych: " + ex.Message, "Błąd");
}
}
}
else if (result == DialogResult.No)
{
return;
}
}
private void PrzyciskWyjscie_Click(object sender, EventArgs e)
{
this.Close();
}
private void PrzyciskWyswietlBiezaceDane_Click(object sender, EventArgs e)
{
PrzyciskWyswietlBiezaceDane.BackColor = Color.FromArgb(66, 120, 221);
PrzyciskWyswietlArchiwalneDane.BackColor = Color.FromArgb(94, 148, 250);
PrzyciskArchiwizujRekord.Visible = true;
PrzyciskPrzywrocRekord.Visible = false;
try
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("SELECT * FROM [Table] WHERE ARCHIWIZACJA = 0", connection))
{
SqlDataAdapter adapter = new SqlDataAdapter(command);
dataTable = new DataTable();
adapter.Fill(dataTable);
tableDataGridView.DataSource = dataTable;
decimal sum = 0;
foreach (DataRow row in dataTable.Rows)
{
if (row.RowState != DataRowState.Deleted)
{
decimal cenaCalosc = decimal.Parse(row["CENACALA"].ToString());
sum += cenaCalosc;
}
}
TextBoxLacznaNaleznosc.Text = sum.ToString();
}
}
}
catch (Exception ex)
{
MessageBox.Show("Wystąpił błąd podczas wczytywania danych: " + ex.Message, "Błąd");
}
}
private void PrzyciskWyswietlArchiwalneDane_Click(object sender, EventArgs e)
{
PrzyciskWyswietlArchiwalneDane.BackColor = Color.FromArgb(66, 120, 221);
PrzyciskWyswietlBiezaceDane.BackColor = Color.FromArgb(94, 148, 250);
PrzyciskArchiwizujRekord.Visible = false;
PrzyciskPrzywrocRekord.Visible = true;
try
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("SELECT * FROM [Table] WHERE ARCHIWIZACJA = 1", connection))
{
SqlDataAdapter adapter = new SqlDataAdapter(command);
dataTable = new DataTable();
adapter.Fill(dataTable);
tableDataGridView.DataSource = dataTable;
decimal sum = 0;
foreach (DataRow row in dataTable.Rows)
{
if (row.RowState != DataRowState.Deleted)
{
decimal cenaCalosc = decimal.Parse(row["CENACALA"].ToString());
sum += cenaCalosc;
}
}
TextBoxLacznaNaleznosc.Text = sum.ToString();
}
}
}
catch (Exception ex)
{
MessageBox.Show("Wystąpił błąd podczas wczytywania danych: " + ex.Message, "Błąd");
}
}
private void PrzyciskUstalenia_Click(object sender, EventArgs e)
{
}
private void PrzyciskWykonajZrzutEkranuTrybMax_Click(object sender, EventArgs e)
{
int x = 1;
string path = Application.StartupPath + "/Zrzuty";
string filename = x + ".png";
if (!Directory.Exists(path))
{
if (LabelOtwierajacyPlikZeZrzutem.Text == "0")
{
LabelOtwierajacyPlikZeZrzutem.Visible = false;
}
else
{
LabelOtwierajacyPlikZeZrzutem.Visible = true;
LabelOtwierajacyPlikZeZrzutem.Text = "Błąd!";
LabelOtwierajacyPlikZeZrzutem.ForeColor = Color.Red;
}
MessageBox.Show("Folder \"Zrzuty\" nie istnieje.", "Błąd");
return;
}
else
{
Rectangle bounds = this.Bounds;
using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size);
}
while (File.Exists(path + @"\" + filename))
{
x = x + 1;
filename = x + ".png";
}
bitmap.Save(path + @"\" + filename);
LabelOtwierajacyPlikZeZrzutem.Text = filename;
LabelOtwierajacyPlikZeZrzutem.ForeColor = Color.Green;
LabelOtwierajacyFolderZeZrzutem.Text = "Zapisano plik:";
if (LabelOtwierajacyFolderZeZrzutem.Text == "0")
{
LabelOtwierajacyFolderZeZrzutem.Visible = false;
}
else
{
LabelOtwierajacyFolderZeZrzutem.Visible = true;
}
if (LabelOtwierajacyPlikZeZrzutem.Text == "0")
{
LabelOtwierajacyPlikZeZrzutem.Visible = false;
}
else
{
LabelOtwierajacyPlikZeZrzutem.Visible = true;
}
}
}
}
private void PrzyciskWykonajZrzutEkranuTrybMin_Click(object sender, EventArgs e)
{
int x = 1;
string path = Application.StartupPath + "/Zrzuty";
string filename = x + ".png";
if (!Directory.Exists(path))
{
MessageBox.Show("Folder \"Zrzuty\" nie istnieje.", "Błąd");
return;
}
else
{
Rectangle bounds = this.Bounds;
using (Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height))
{
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(new Point(bounds.Left, bounds.Top), Point.Empty, bounds.Size);
}
while (File.Exists(path + @"\" + filename))
{
x = x + 1;
filename = x + ".png";
}
bitmap.Save(path + @"\" + filename);
}
}
}
private void PrzyciskUruchomKalkulator_Click(object sender, EventArgs e)
{
ProcessStartInfo info = new ProcessStartInfo();
info.FileName = "calc";
info.UseShellExecute = true;
Process.Start(info);
}
private void CheckBoxTrybMiniLubMax_CheckedChanged(object sender, EventArgs e)
{
if (CheckBoxTrybMiniLubMax.Checked == true)
{
this.tableDataGridView.Location = new Point(0, 60);
label5.Location = new Point(7, 384);
TextBoxNumerKonta.Location = new Point(142, 383);
label6.Location = new Point(488, 384);
TextBoxLacznaNaleznosc.Location = new Point(604, 383);
label7.Location = new Point(726, 384);
PrzyciskDodajRekord.Visible = false;
PrzyciskKasujRekord.Visible = false;
PrzyciskArchiwizujRekord.Visible = false;
PrzyciskWyjscie.Visible = false;
PrzyciskPrzywrocRekord.Visible = false;
PrzyciskWykonajZrzutEkranuTrybMin.Visible = true;
this.Size = new Size(772, 465);
this.CenterToScreen();
}
else
{
this.tableDataGridView.Location = new Point(260, 134);
label5.Location = new Point(264, 464);
TextBoxNumerKonta.Location = new Point(399, 463);
label6.Location = new Point(748, 464);
TextBoxLacznaNaleznosc.Location = new Point(864, 463);
label7.Location = new Point(986, 464);
PrzyciskDodajRekord.Visible = true;
PrzyciskKasujRekord.Visible = true;
PrzyciskArchiwizujRekord.Visible = true;
PrzyciskWyjscie.Visible = true;
PrzyciskPrzywrocRekord.Visible = true;
PrzyciskWykonajZrzutEkranuTrybMin.Visible = false;
this.Size = new Size(1050, 553);
this.CenterToScreen();
}
}
private void LabelOtwierajacyFolderZeZrzutem_Click(object sender, EventArgs e)
{
string path = Application.StartupPath + "/Zrzuty";
if (!Directory.Exists(path))
{
MessageBox.Show("Folder \"Zrzuty\" nie istnieje.", "Błąd");
return;
}
Process.Start(new ProcessStartInfo()
{
FileName = path,
UseShellExecute = true,
Verb = "open"
});
}
private void LabelOtwierajacyPlikZeZrzutem_Click(object sender, EventArgs e)
{
string filename = LabelOtwierajacyPlikZeZrzutem.Text;
string path = Application.StartupPath + "/Zrzuty" + @"\" + filename;
if (!File.Exists(path))
{
MessageBox.Show("Plik nie istnieje.", "Błąd");
return;
}
var p = new Process();
p.StartInfo = new ProcessStartInfo(path)
{
UseShellExecute = true
};
p.Start();
}
}
}