Данные дублируются в datagridview, когда запрос применяется? - PullRequest
0 голосов
/ 17 февраля 2019

Я пытаюсь выполнить операцию CRUD для winform

Это для 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();
        }
    }

Запрос работает нормально, но строки все равно дублируются. В чем проблема? Я не могу найти ошибку, поэтому я предполагаю, что я что-то делаю неправильно.

1 Ответ

0 голосов
/ 17 февраля 2019

Ваш метод 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();
    }
}

Таким образом, каждый раз, когда вы собираетесь заполнить сетку новыми данными, вы сначала очищаетесуществующие данные из него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...