MySQL + dataGridView
MySQL + dataGridView

MySQL + dataGridView

7 июля 2022       105 просмотров

Вы мне, само собой скажете, прочитав предыдущую заметку, мол, кто же в наше время работает с консолью?

А я отвечу — красноглазые админы никто, а чего вы хотели? Всё должно быть последовательно.
Но сегодня мы объединим опыт предыдущих двух заметок и вытащим информацию из базы в табличку — элемент "dataGridView".

Для этого привычным движением запускаем руку в трусы вижуал студию и создаем новый проект.
Сразу же пропишем глобальные переменные в Program.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace dgv_form
{
    internal static class Program
    {
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form2());//не обращайте внимания, я сначала кинул dgv на первую формочку, а потом уже сделал вторую — с полями под ввод логина и пароля, так что программа будет стартовать со второй
        }
        static public string username;//да-да, это они
        static public string password;//не удивляйтесь
    }
}

Кинем палку элемент "dataGridView" на первую форму,

элементы

в обработчиках выберем "Activated" и перейдём к коду:

using System;
using System.Data;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace dgv_form
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        static string connect = "Server=92.126.251.58;database=pdpdb;port=3306;Uid=" + Program.username + ";pwd=" + Program.password;//параметры подключения
        MySqlConnection pconn = new MySqlConnection(connect);//создаем подключение
        string sqlsel = "SELECT name, place FROM list;";//сочиняем какой запрос хотим передать базе

        private void Form1_Activated(object sender, EventArgs e)
        {
            try
            {
                pconn.Open();//открываем соединение
                MySqlCommand command = new MySqlCommand(sqlsel, pconn);//не забываем про параметры
                command.CommandText = sqlsel;
                MySqlDataReader reader = command.ExecuteReader();//читаем
                DataTable table = new DataTable();//делаем табличку
                table.Load(reader);//заполняем табличку из ридера
                dataGridView1.DataSource = table;//указываем источник инфы для dataGridView
                pconn.Close();//не забываем закрыть соединение
            }
            catch
            {
                MessageBox.Show("not OK");//что-то пошло не так
            }
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            Application.Exit();//да, при закрытии этой формы — приложение закрывается тоже
        }
    }
}

Тут мы закончили и можем закурить перейти к созданию второй формы.
Жамкаем на имени проекта ПКМ и выбираем "Добавить-Форму":

добавление

формы

После чего применяем все свои неимоверные дизайнерские скиллы и делаем невообразимое что-то похожее на форму авторизации. Которую, немедленно, фаршируем кодом:

using System.Windows.Forms;

namespace dgv_form
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)//нам нужна реакция только на Enter
            {
                Program.username = textBox1.Text;//забираем логин
                Program.password = textBox2.Text;//забираем пароль
                Form1 form1 = new Form1();
                form1.Show();//показываем
                this.Hide();//прячем
            }
        }

        private void textBox2_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)//нам нужна реакция только на Enter
            {
                Program.username = textBox1.Text;//забираем логин
                Program.password = textBox2.Text;//забираем пароль
                Form1 form1 = new Form1();
                form1.Show();//показываем
                this.Hide();//прячем
            }
        }
    }
}

Настало время проверить нашу залипуху работу:

да-да, я вконец обленился

На этот раз я сделал над собой неимоверное усилие и поставил в свойствах PasswordChar у формы значок звездочки:

пароль вам знать всё ещё не обязательно

После авторизации загружается наша вторая первая форма и подгружает инфу из базы:

как-то так

И тут вы скажете: "Александр, ты совсем охуел обленился? Кто так выводит таблички? Выравнивания нет. До краев не наливают дотягиваются ячейки. Названия — на буржуйском."

Ладненько, давайте немножко вернемся к dGV и пропишем кой-какие свойства:

конкретно — свойства столбцов

Столбцы проименуем явно:

ща, скоро закончим

Укажем какие данные туда ложатся кладутся:

скорей бы уже

Поставим растягивание ячеек:

чот я подзаебался эту заметку делать

И наша форма тут же преобразится:

уже почти...

Запускаем и проверяем:

ага, бля!

Можно, конечно, было бы ещё выделить в редакторе сам элемент "dataGridView", в свойствах найти "Anchor" и сделать прилипание этого элемента к краям окна, чтобы он автоматически растягивался, при изменении размеров окна, но это уже совсем другая история у нас табличка чисто символическая и нам тянуть окно лень нет смысла.