Loading and Refreshing DataGrid in WinForms using C# .Net Framework I am looking for some review on the code I am about to provide below.

I'd like to improve my coding in general and happy to hear any comments from the community.

The goal of this code is simply load dataGridView1 with some data from MySQL and Refresh it with a click of a button.

I have not yet tried using automatic refresh. But will look into it soon or later.

Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MySql.Data.MySqlClient;
using System.Configuration;

namespace Final_Version
{
    public partial class Form19 : Form
    {
        public Form19()
        {
            InitializeComponent();
        }

        private void Form19_Load(object sender, EventArgs e)
        {
            RefreshGridHistory();
        }




        string connString = ConfigurationManager.ConnectionStrings["Final_Version.Properties.Settings.technicalConnectionString"].ConnectionString;

        public void RefreshGridHistory()
        {
            // MySQL connection string
            using (var conn = new MySqlConnection(connString))
            {
                //Seelct query
                using (var mySqlDataAdapter = new MySqlDataAdapter("select r.date_requested, u.username, r.product_code, r.customer_code " +
                                                                   " from verify v join request r on v.request_id = r.id join users u on r.user_id = u.id join" +
                                                                    " users u2 on v.user_id = u2.id where v.status = 'Verified' or v.status = 'Rejected';", conn))
                {
                    using (var dataSet = new DataSet())
                    {
                        DataSet DS = new DataSet();
                        mySqlDataAdapter.Fill(DS);

                        //Assign headers to Data Grid View
                        dataGridView1.DataSource = DS.Tables[0];
                        dataGridView1.Columns[0].HeaderText = "Date Requested";
                        dataGridView1.Columns[1].HeaderText = "User Requested";
                        dataGridView1.Columns[2].HeaderText = "Product Code";
                        dataGridView1.Columns[3].HeaderText = "Customer Code";

                    }
                }
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            RefreshGridHistory();
        }
    }
}
Single responsibility

Move the query logic to different class, let's call it DAL for example. In this implementation you are returning DataTable.  Returning a list of some class instead will make sure changes in the DB query/ schema will not affect the GUI but only the DAL class. 

LINQ

You can write the sql query using linq and then if you have syntax errors they will be cache during completion

Grid

I wonder why  you set the columns headers multiple times?

Think about this scenario: when the form loads, If the query return 0 results or there is a connection problem, how the grid will look like?