From assistance on the Forum I have successfully created a link between codes on both the parent and the child forms in the Sales table. But when I enter data in the child form and want to save it into the table, it displays the following error message; and thus makes my work incomplete:
" System.Data.SqlClient.SqlException: 'Error converting data type nvarchar to numeric.' "
I want to attach here with both code windows of the parent and child forms and the image of the process for detail assistance.
The Parent code window:-
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;
namespace BusinessManagement { public partial class SalesList : Form { public SalesList() { InitializeComponent(); }
SqlConnection con = new SqlConnection(); SqlCommand cmd = new SqlCommand(); SqlDataAdapter da = new SqlDataAdapter(); DataTable dt = new DataTable();
private void SalesList_Load(object sender, EventArgs e) { con = new SqlConnection(ConfigurationManager.ConnectionStrings["con"].ConnectionString); con.Open();
cmd = new SqlCommand("SELECT Code, ItemCategory, Description, UnitSize FROM Sales", con); da = new SqlDataAdapter(cmd); da.Fill(dt);
dataGridView1.DataSource = dt; con.Close(); }
private void txtSearch_KeyUp(object sender, KeyEventArgs e) { con = new SqlConnection(ConfigurationManager.ConnectionStrings["con"].ConnectionString); con.Open();
try {
cmd = new SqlCommand("SELECT Code, ItemCategory, Description, UnitSize FROM Sales Where Code LIKE '%' +@Code+'%' OR ItemCategory LIKE '%' +@ItemCategory+ '%' OR Description LIKE '%' +@Description+ '%' OR UnitSize LIKE '%' +@UnitSize+ '%'", con);
cmd.Parameters.AddWithValue("@Code", txtSearch.Text); cmd.Parameters.AddWithValue("@ItemCategory", txtSearch.Text); cmd.Parameters.AddWithValue("@Description", txtSearch.Text); cmd.Parameters.AddWithValue("@UnitSize", txtSearch.Text);
da = new SqlDataAdapter(cmd); da.Fill(dt);
SqlDataReader reader = cmd.ExecuteReader(); dt = new DataTable(); dt.Load(reader);
dataGridView1.DataSource = dt; } catch (Exception err) { MessageBox.Show(err.Message); } con.Close(); }
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex >= 0) { // Get the selected unique code from the clicked row string code = dataGridView1.Rows[e.RowIndex].Cells["Code"].Value.ToString(); // Open the child form and pass the unique code SalesForm childForm = new SalesForm(code); childForm.ShowDialog(); } } } }
The child form code window:-
namespace BusinessManagement { public partial class SalesForm : Form { private string code;
DataRow row;
// Constructor accepts the unique code passed from the parent form public SalesForm(string code) { InitializeComponent();
this.code = code; codeTextBox.Text = code; }
// Add logic to save entered data to the database private void btnSave_Click(object sender, EventArgs e) { SqlConnection con = new SqlConnection(); SqlCommand cmd = new SqlCommand(); SqlDataAdapter da = new SqlDataAdapter(); DataTable dt = new DataTable();
con = new SqlConnection(ConfigurationManager.ConnectionStrings["con"].ConnectionString);
cmd.Connection = con; con.Open(); cmd.CommandText = "INSERT INTO Sales (SaleDate, Code, SaleQty, SalePrice, TotalSales, Damaged, Comments) VALUES(@SaleDate, @Code, @SaleQty, @SalePrice, @TotalSales, @Damaged, @Comments)"; cmd.Parameters.AddWithValue("@SaleDate", dateDateTimePicker.Text); cmd.Parameters.AddWithValue("@Code", codeTextBox.Text); cmd.Parameters.AddWithValue("@SaleQty", saleQtyTextBox.Text); cmd.Parameters.AddWithValue("@SalePrice", salePriceTextBox.Text); cmd.Parameters.AddWithValue("@TotalSales", totalSalesTextBox.Text); cmd.Parameters.AddWithValue("@Damaged", damagedTextBox.Text); cmd.Parameters.AddWithValue("@Comments", commentsTextBox.Text); cmd.ExecuteNonQuery();
// Close Connection con.Close();
//Create a DataRow to add to the DataSet
DataSet ds = new DataSet(); ds.Tables["Sales"].Rows.Add(row);
//Accept changes to the DataSet ds.AcceptChanges();
//Display a success message MessageBox.Show("Record saved successfully!"); }
private void SalesForm_Load(object sender, EventArgs e) {
} } }
Thanks for usual assistance.