book-openDataGridView - afișare și configurare de bază

DataGridView este controlul principal pentru afișarea datelor tabulare în WinForms. Afișează o colecție de obiecte ca un tabel cu rânduri și coloane, similar cu un Excel simplificat. Este mult mai potrivit decât ListBox atunci când ai mai multe proprietăți de afișat simultan.

DataSource și BindingList<T>

Cel mai simplu și mai practic mod de a popula un DataGridView este prin proprietatea DataSource. Când atribui o colecție ca DataSource, grila generează automat câte o coloană pentru fiecare proprietate publică a tipului.

BindingList<T> este tipul preferat față de List<T> pentru că notifică automat DataGridView-ul când se adaugă sau se șterg elemente — grila se actualizează fără să apelezi manual Refresh():

public partial class Form1 : Form
{
    // BindingList in loc de List — actualizari automate in DataGridView
    private BindingList<Angajat> angajati = new BindingList<Angajat>();

    private void Form1_Load(object sender, EventArgs e)
    {
        // Atribuim DataSource o singura data, in Load
        dgvAngajati.DataSource = angajati;

        // Adaugam cateva date de test
        angajati.Add(new Angajat { Nume = "Popescu", Prenume = "Ion", Departament = "IT", Salariu = 5000 });
        angajati.Add(new Angajat { Nume = "Ionescu", Prenume = "Maria", Departament = "HR", Salariu = 4200 });
        // Grila se actualizeaza automat
    }
}

📸 SCREENSHOT: DataGridView populat cu câteva rânduri de angajați, arătând că fiecare proprietate a clasei Angajat a generat automat o coloană. Evidențiați antetele coloanelor.

Coloane auto-generate vs. configurate manual

Când setezi DataSource, DataGridView-ul generează o coloană pentru fiecare proprietate publică, inclusiv cele pe care nu vrei să le afișezi. Poți controla asta în două moduri.

Varianta simplă — ascunderea coloanelor după generare:

Varianta controlată — dezactivezi auto-generarea și adaugi coloane manual:

Pentru exercițiu, varianta simplă cu ascunderea coloanelor nedorite este suficientă.

Proprietăți esențiale de configurare

📸 SCREENSHOT: Același DataGridView cu și fără RowHeadersVisible = false și AllowUserToAddRows = false, arătând cum arată grila cu și fără rândul de adăugare și fără antetul de rânduri.

Obținerea elementului selectat

Când DataSource este o BindingList<T>, indexul rândului selectat corespunde direct indexului în colecție:

Alternativ, poți folosi CurrentRow:

📸 SCREENSHOT: DataGridView cu un rând selectat (evidențiat în albastru pe toată lățimea). Arată că SelectionMode = FullRowSelect selectează întreaga linie, nu doar o celulă.

Evenimentul SelectionChanged

Util pentru a activa sau dezactiva butoanele de editare și ștergere în funcție de dacă ceva este selectat:

Apelează această metodă și în Form1_Load pentru a seta starea inițială corectă (butoanele dezactivate când lista e goală).

Evenimentul CellDoubleClick

O îmbunătățire de UX: dublu-click pe un rând deschide direct formularul de editare:

Last updated