मैंने तालिका में कनेक्शन और सम्मिलित मान स्थापित किए हैं।

हालांकि, मुझे यकीन नहीं है कि डेटाग्रिडव्यू को रीफ्रेश करने का सबसे अच्छा तरीका है क्योंकि क्लिक बटन के बाद मान डाले गए हैं।

private void button1_Click(object sender, EventArgs e)
{           
   {             
      string theText = makeTextBox.Text;
      string theText2 = modelTextBox.Text;
                
      var value = Convert.ToInt32(yearTextBox.Text);      
      int i = 6;
      cnn.Open();
      MySqlCommand cmd = new MySqlCommand();
      cmd.Connection = cnn;
      cmd.CommandText = "INSERT INTO cars(Make,Model,Year) VALUES(@Make,@Model,@Year)";
      cmd.Prepare();

      cmd.Parameters.AddWithValue("@Make", theText);
      cmd.Parameters.AddWithValue("@Model", theText2);
      cmd.Parameters.AddWithValue("@Year", value);
                
      cmd.ExecuteNonQuery();
   {
}

      dataGridView1.DataSource = carsBindingSource;
      dataGridView1.Refresh();

      cnn.Close();

            }
        }
    }
    }

छवि विवरण यहां दर्ज करें

संपादित करें:

यहां डेटा स्रोत को रीबाइंड करने के कार्य समाधान के साथ कोड है और फिर यह अपडेट हो जाएगा:

        {
            string theText = textBox1.Text;
            string theText2 = textBox2.Text;

            var value = Convert.ToInt32(textBox3.Text);

            int i = 6;
            cnn.Open();
            MySqlCommand cmd = new MySqlCommand();
            cmd.Connection = cnn;
            cmd.CommandText = "INSERT INTO cars(Make,Model,Year) VALUES(@Make,@Model,@Year)";
            cmd.Prepare();

            cmd.Parameters.AddWithValue("@Make", theText);
            cmd.Parameters.AddWithValue("@Model", theText2);
            cmd.Parameters.AddWithValue("@Year", value);

            cmd.ExecuteNonQuery();
            {
            }








            cnn.Close();

            carsBindingSource = new BindingSource();
            carsBindingSource.DataSource = carsTableAdapter.GetData();
            dataGridView2.DataSource = carsBindingSource;
        }
    }```
1
David Graff 16 अगस्त 2020, 22:28

2 जवाब

सबसे बढ़िया उत्तर

आपके कोड में वह हिस्सा नहीं है जहां carsBindingSource वैरिएबल को डेटा के साथ इनिशियलाइज़ किया गया है। अपने सीमित कोड से, यह ध्यान दिया जाना चाहिए कि ... यदि आप डेटा बेस में तालिका में एक नई पंक्ति जोड़ते/सम्मिलित करते हैं, तो यह स्वचालित रूप से carsBindingSource. को अपडेट नहीं करेगा।

यह अज्ञात है कि "क्या" का उपयोग DataSource के रूप में carsBindingSource. के लिए किया जाता है या, यह डेटा स्रोत कैसे भरा जाता है। मैं मान लूंगा कि DataSource से BindingSource एक DataTable है और कोड में कहीं यह DataTable एक क्वेरी से डेटा बेस तक मिल रहा है। यदि यह प्रक्रिया पहले से ही एक ऐसी विधि में नहीं है जो DataTable लौटाती है, तो, मैं आपको एक बनाने की सलाह देता हूं, और यह कुछ ऐसा दिखाई दे सकता है...

private DataTable GetCarsDT() {
  DataSet ds = new DataSet();
  string connString = "Server = localhost; Database = CarsDB; Trusted_Connection = True;";
  try {
    using (SqlConnection conn = new SqlConnection(connString)) {
      conn.Open();
      using (SqlCommand command = new SqlCommand()) {
        command.Connection = conn;
        command.CommandText = "SELECT * FROM Cars";
        using (SqlDataAdapter da = new SqlDataAdapter(command)) {
          da.Fill(ds, "Cars");
          return ds.Tables[0];
        }
      }
    }
  }
  catch (Exception ex) {
    MessageBox.Show("DBError:" + ex.Message);
  }
  return null;
}

ऊपर तीन (3) कॉलम, मेक, मॉडल और वर्ष के साथ एक DataTable लौटाएगा। इस DataTable का उपयोग DataSource के रूप में BindingSourcecarsBindingBource. के लिए किया जाता है

अब button1_Click ईवेंट में, कोड डेटा बेस में नए मान सम्मिलित करता है। हालाँकि, carsBindingSource में अभी भी "पहले" डेटा होगा जिसमें नए आइटम डीबी में जोड़े गए थे। इसलिए, हम डीबी में नए आइटम जोड़े जाने के बाद carsBindingSource को "अपडेट" करने के लिए उपरोक्त विधि का उपयोग कर सकते हैं।

नोट: आप यहां दो रूटों पर जा सकते हैं, 1) जैसा कि ऊपर वर्णित है, बस बाध्यकारी स्रोत में डेटा "सभी" अपडेट करें ... या ... 2) डेटा बेस में नए आइटम अपडेट करने के बाद, आप नए आइटम भी जोड़ सकते हैं बाध्यकारी स्रोत का डेटा स्रोत... यानी इसकी DataTable. कोई भी तरीका काम करेगा और जब तक बड़ी मात्रा में डेटा न हो, मुझे नहीं लगता कि एक तरीका दूसरे पर पसंद किया जाएगा।

नीचे दिखाया गया है कि ऊपर क्या वर्णित है। ध्यान दें, टिप्पणी किया गया कोड सीधे DataTable. में नए आइटम जोड़ता है, आप दोनों में से किसी एक का उपयोग कर सकते हैं, लेकिन स्पष्ट रूप से दोनों का नहीं।

private void button1_Click(object sender, EventArgs e) {
  string connString = "Server = localhost; Database = CarsDB; Trusted_Connection = True;";
  try {
    using (SqlConnection conn = new SqlConnection(connString)) {
      conn.Open();
      using (SqlCommand command = new SqlCommand()) {
        command.Connection = conn;
        command.CommandText = "INSERT INTO cars(Make,Model,Year) VALUES(@Make,@Model,@Year)";
        command.Parameters.Add("@Make", SqlDbType.NChar, 50).Value = makeTextBox.Text.Trim();
        command.Parameters.Add("@Model", SqlDbType.NChar, 50).Value = modelTextBox.Text.Trim();
        int.TryParse(yearTextBox.Text.Trim(), out int year);
        command.Parameters.Add("@Year", SqlDbType.Int).Value = year;
        command.ExecuteNonQuery();
        carsBindingSource.DataSource = GetCarsDT();
        //DataTable dt = (DataTable)carsBindingSource.DataSource;
        //dt.Rows.Add(makeTextBox.Text.Trim(), modelTextBox.Text.Trim(), year);
      }
    }
  }
  catch (Exception ex) {
    MessageBox.Show("DBError:" + ex.Message);
  }
}

यह सब एक साथ रखकर…

BindingSource carsBindingSource;

public Form1() {
  InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e) {
  carsBindingSource = new BindingSource();
  carsBindingSource.DataSource = GetCarsDT();
  dataGridView1.DataSource = carsBindingSource;
}

आशा है कि यह समझ में आता है।

0
JohnG 17 अगस्त 2020, 02:20

मुझे नहीं लगता कि यह संभव है। सबमिट करने और फिर डेटा रीफ़्रेश करने के लिए आपको एक अलग बटन बनाने की आवश्यकता हो सकती है

0
Snow Toy 16 अगस्त 2020, 23:59