Don't do it like that! Never concatenate strings to build a SQL command. It leaves you wide open to accidental or deliberate SQL Injection attack which can destroy your entire database. Use Parametrized queries instead:
using (SqlCommand cmd = new SqlCommand("INSERT INTO tblPurchase (Pur_No,Bill_Challan_No,Pur_Date,Sup_Name,Item_Name,Qty,Rate,Total)VALUES(@PN, @BCN, @PD, @SN, @IN, @QTY, @RA, @TOT), con))
{
cmd.Parameters.AddWithValue("@PN", textBox1.Text);
cmd.Parameters.AddWithValue("@BCN", textBox2.Text);
cmd.Parameters.AddWithValue("@PD", dateTimePicker1.Value);
cmd.Parameters.AddWithValue("@SN", textBox6.Text);
cmd.Parameters.AddWithValue("@IN", textBox3.Text);
cmd.Parameters.AddWithValue("@QTY", textBox4.Text);
cmd.Parameters.AddWithValue("@RA", textBox5.Text);
cmd.Parameters.AddWithValue("@TOT", textBox7.Text);
cmd.ExecuteNonQuery();
...
But even then, that's bad. Instead, your text boxes should be changed to values using TryParse methods and errors reported to the user first.
int qty;
if (!int.TryParse(textBox4.Text, out qty))
{
... report problem to user
return;
If you do that for all numeric values, then your problem of displaying (or just checking) that quantity times rate equaling the total becomes trivial - you already know how to do that.
BTW: Do yourself a favour, and stop using Visual Studio default names for everything - you may remember that "TextBox8" is the mobile number today, but when you have to modify it in three weeks time, will you then? Use descriptive names - "tbMobileNo" for example - and your code becomes easier to read, more self documenting, easier to maintain - and surprisingly quicker to code because Intellisense can get to to "tbMobile" in three keystrokes, where "TextBox8" takes thinking about and 8 keystrokes...