मैं विनफॉर्म पर सीआरयूडी ऑपरेशन करने की कोशिश कर रहा हूं

यह ASP.NET Winform के लिए है जिसमें जब भी मैं डेटाबेस में या डेटाबेस से डेटा डालने, अपडेट करने या हटाने का प्रयास करता हूं तो सबसे पहले सभी पंक्तियों और अंदर की सामग्री डुप्लिकेट हो जाती है https://imgur.com/a/d5jgv6H हालाँकि, एप्लिकेशन को पुनरारंभ करने पर डेटा सही ढंग से दिखाई देता है

    private void button2_Click(object sender, EventArgs e)
    {
        //insert
        try
        {
            con.Open();
            //.text property gets/Sets text associated with this control

            String name = textBox1.Text.ToString();
            String address = textBox2.Text.ToString();

            String number = textBox3.Text.ToString();
            long pnumber = Int64.Parse(number);

            String sem = textBox4.Text.ToString();
            long semester = Int64.Parse(sem);

            string branch = comboBox1.SelectedItem.ToString();

            String query = "insert into student values('" + name + "','" + address + "'," + pnumber + "," + semester + ",'" + branch + "')";
            SqlCommand sqlcom = new SqlCommand(query, con);

            int i = sqlcom.ExecuteNonQuery();

            if (i >= 1)
            {
                MessageBox.Show("Student has been Registered: " + name);
            }
            else
            {
                MessageBox.Show("Registration Failed ! ");
            }
            //clearing data
            button1_Click(sender, e);
            show();
            con.Close();
        }
        catch (Exception exp)
        {
            MessageBox.Show("Error is : " + exp.ToString());
        }
    }


   void show()
    {
        String query = "select * from student";
        SqlDataAdapter adapter = new SqlDataAdapter(query, con);
        DataTable dataInTable = new DataTable();
        adapter.Fill(dataInTable);

        //DataRow represents row of data in DataTable
        foreach (DataRow item in dataInTable.Rows)
        {
            int n = dataGridView1.Rows.Add();
            dataGridView1.Rows[n].Cells[0].Value = item[0].ToString();
            dataGridView1.Rows[n].Cells[1].Value = item[1].ToString();
            dataGridView1.Rows[n].Cells[2].Value = item[2].ToString();
            dataGridView1.Rows[n].Cells[3].Value = item[3].ToString();
            dataGridView1.Rows[n].Cells[4].Value = item[4].ToString();
        }
    }

क्वेरी ठीक काम करती है लेकिन पंक्तियां अभी भी डुप्लीकेट हो जाती हैं। समस्या क्या है? मुझे कोई बग नहीं मिल रहा है, इसलिए मुझे लगता है कि मैं कुछ गलत कर रहा हूं।

-2
Chameleon 17 फरवरी 2019, 15:24

1 उत्तर

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

आपकी show विधि ग्रिड में पंक्तियों को जोड़ती है, लेकिन यह उन पंक्तियों को कभी नहीं हटाती है जो पहले से ही ग्रिड में हैं।

आम तौर पर कोई DataGridView या अन्य डेटा-बाउंड नियंत्रणों को पॉप्युलेट करने के लिए डेटा बाइंडिंग का उपयोग करेगा। मुझे लगता है कि आपके पास सीधे पंक्तियों को जोड़ने के कारण हैं (शायद यह आपकी आवश्यकताओं के लिए आसान है) और इसे न बदलें। उस संरचना को देखते हुए, शायद सबसे आसान काम नई पंक्तियों को जोड़ने से पहले ग्रिड को साफ़ करना है:

void show()
{
    String query = "select * from student";
    SqlDataAdapter adapter = new SqlDataAdapter(query, con);
    DataTable dataInTable = new DataTable();
    adapter.Fill(dataInTable);

    dataGridView1.Rows.Clear(); // <--- here

    foreach (DataRow item in dataInTable.Rows)
    {
        int n = dataGridView1.Rows.Add();
        dataGridView1.Rows[n].Cells[0].Value = item[0].ToString();
        dataGridView1.Rows[n].Cells[1].Value = item[1].ToString();
        dataGridView1.Rows[n].Cells[2].Value = item[2].ToString();
        dataGridView1.Rows[n].Cells[3].Value = item[3].ToString();
        dataGridView1.Rows[n].Cells[4].Value = item[4].ToString();
    }
}

इस तरह जब भी आप नए डेटा के साथ ग्रिड को पॉप्युलेट करने वाले होते हैं, तो आप पहले इससे मौजूदा डेटा को साफ़ करते हैं।

0
David 17 फरवरी 2019, 12:39