Uvod u DataGridView

DataGridView je moćna, fleksibilna kontrola, jednostavna za korišćenje, koja se koristi za prikaz tabelarnih podataka. Može da se poveže sa jednom tabelom iz baze ili sa objektom koji je izveden iz tabele. Korišćenjem svojstva DataSource povezuje sa sa objektom klase DataTable ili objektom klase koja je izvedena iz klase DataTable. Ako se izvrši povezivanje sa objektom klase DataSet mora se specificirati i njeno svojstvo DataMember kojim se naznačava sa kojom tabelom se vrši povezivanje. DataGridView kreira jednu kolonu za svaku kolonu iz izvora podataka. Header kolone kreira na osnovu naziva odgovarajućeg atributa iz tabele. Dozvoljava različite tipove selekcije: može se selektovati jedna ili više vrsta, jedna ili više kolona, jedna ili više ćelija, ili cela tabela (klikom na ćeliju u gornjem levom uglu).


Osobine DataGridView kontrole

Korišćenjem tastera Tab prelazi se iz jedne u drugu ćeliju tabele. Ima automatski tooltip kojim se prikazuje ceo sadržaj ćelije kada se pokazivač miša nalazi iznad nje.
Podržava automatsko sortiranje, klikom na header kolone. Dvostrukim klikom između header-a kolona vrši se automatsko podešavanje širine kolone. Omogućava unos sadržaja u ćeliju nakon dvostrukog klika na ćeliju.


Povezivanje DataGridView kontrole sa tabelom iz koda

dataGridView1.DataSource = nds.Products;

dataGridView1.DataSource = nds;
dataGridView1.DataMember = "Products";

Pomoću svojstva DataSource specificira se tabela iz tipiziranog DataSet objekta sa kojom se povezuje DataGridView kontrola. Drugi način je da se kao DataSource svojstvo specificira DataSet objekat, ali se u ovom slučaju mora definisati DataMember svojstvo, odnosno tabela iz DataSeta sa kojom se vrši povezivanje.


Povezivanje DataGridView kontrole sa tabelom u dizaj modu

 

Klikom na strelicu u gornjem desnom uglu DataGridView kontrole otvara se prozor DataGridView Tasks. U ovom prozoru se klikom na ComboBox kontrolu Choose Data Source specificira tabela iz DataSeta koju treba prikazati unutar DataGridView kontrole. Ovim postupkom se automatski kreira odgovarajući BindingSource objekat kao i punjenje tabele iz DataSeta podacima iz baze podataka primenom TableAdapter klase. Kod koji puni tabelu unutar DataSeta se dodaje u Load proceduri forme.


DataGridView objekti

Svojstvo Colums objekta klase DataGridView daje kolekciju DataGridViewColumn objekata. Svojstvo Rows daje kolekciju DataGridViewRow objekata. DataGridViewRow objekat ima svojstvo Cells kojim se prikazuje kolekcija DataGridViewCell objekata.


Šematski prikaz DataGridView objekata

Na slici je dat šematski prikaz objekata koji ulaze u sastav DataGridView objekta.


DataGridViewColumn objekat

 

DataGridViewColumn objektima date DataGridView kontrole se pristupa korišćenjem svojstva Columns. Svojstvo Colums vraća kolekciju DataGridViewColumn objekata. Sada se pojedininim kolonama tabele tj. DataGridViewColumn objektima pristupa ili korišćenjem rednog broja vrste u tabeli ili korišćenjem njenog naziva. Kada se u prozoru DataGridView Tasks klikne na opciju Edit Columns otvara se prozor EditColums u kome možemo iščitati naziv određene kolone koja ulazi u sastav DataGridView kontrole. U primeru na slici obrađuje se Click događaj na kontrolu Button. Unutar event handlera za klik događaj na dugme, korišćenjem foreach petlje se iščitavaju nazivi svih kolona koje ulaze u sastav DataGridView kontrole.


Prikaz header-a kolona

DataGridViewColumn col = dataGridView1.Columns[0];
col.HeaderText = "ID proizvoda";

foreach (DataGridViewColumn dgvC in dataGridView1.Columns)
{
    listBox1.Items.Add(dgvC.HeaderText);
}

Korišćenjem svojstva HeaderText se iz koda može iščitati ili promeniti heder tj. zaglavlje određene kolone koja ulazi u sastav DataGridView objekta. U gornjem kodu, korišćenjem foreach petlje unutar ListBox kontrole se prikazuju header-i svih kolona naše DataGridView kontrole.


DataGridViewRow objekat

private void button3_Click(object sender, EventArgs e)
{
    // pristup drugoj vrsti
    DataGridViewRow dgvR = dataGridView1.Rows[1];
   
    // prikazi sadrzaj celija druge vrste
    foreach (DataGridViewColumn dgvC in dataGridView1.Columns)
    {
        listBox1.Items.Add(dgvR.Cells[dgvC.Name].Value);
    }
}

Korišćenjem svojstva Rows objekta klase DataGridView, pristupa se kolekciji DataGridViewRow objekata, koji predstavljaju vrste DataGridView kontrole. Vrstama unutar DataGridView kontrole se isključivo pristupa na osnovu njenog rednog broja, tj. indeksa koji je baziran na broju 0. U primeru na slajdu pristupa se drugoj vrsti, tj. pristupa se objektu klase DataGridViewRow koji predstavlja drugu vrstu grida. DataGridViewRow objekat ima svojstvo Cells koje vraća kolekciju DataGridViewCell objekata odnosno ćelije date vrste. Pojedinim ćelijam jedne vrste tj. ćelijama DataGridViewRow objekta pristupa se ili korišćenjem rednog broja kolone kojoj ćelija pripada ili korišćenjem naziva kolone kojoj ćelija pripada.


Klase izvedene iz klase DataGridViewColumn

DataGridViewButtonColum klasa prikazuje dugmad tj. Button kontrole unutar jedne kolone DataGridView kontrole. Njoj odgovarjuća klasa za ćeliju je DataGridViewButtonCell.

Sledeća klasa je DataGridViewLinkColumn i njoj odgovarajuća klasa za ćeliju DataGridViewLinkCell čija je funkcionalnost slična funkcionalnosti Button kolone, ali se tekst prikazuje u formi linka.

DataGridViewCheckBoxColumn (DataGridViewCheckBoxCell  se automatski kreira pri vizuelnom povezivanju DataGridView kontrole za tabelu koja sadrži Boolean tip podataka.

DataGridViewComboBoxColumn (DataGridViewComboBoxCell) se koristi se u situacijama kada je potrebno ograničiti unos u ćeliju tj. omogućiti korisniku da u ćeliju odabere jednu vrednost iz datog skupa vrednosti.

DataGridViewImageColumn (DataGridViewImageCell ) se koristi se za prikaz slika.

DataGridViewTextBoxColumn (DataGridViewTextBoxCell  se koristi za prikaz teksta i predstavlja podrazumevani tip kolone u DataGridView kontroli.


Kreiranje DataGridView kontrole koja nije povezana sa izvorom podataka

DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn();
col1.Name = "ID";
col1.HeaderText = "ID proizvoda";
dataGridView1.Columns.Add(col1);
DataGridViewComboBoxColumn col2 = new DataGridViewComboBoxColumn();
col2.Items.Add("Stampaci");
col2.Items.Add("Skeneri");
col2.Name = "Category";
col2.HeaderText = "Kategorijaa";
dataGridView1.Columns.Add(col2);
DataGridViewRow dataGridRow = new DataGridViewRow();
DataGridViewTextBoxCell txt1 = new DataGridViewTextBoxCell();
DataGridViewComboBoxCell cmb1 = new DataGridViewComboBoxCell();
cmb1.Items.Add("Stampaci");
cmb1.Items.Add("Skeneri");
txt1.Value = "1";
cmb1.Value = "Skeneri";
dataGridRow.Cells.Add(txt1);
txt1.ReadOnly = true;
dataGridRow.Cells.Add(cmb1);
dataGridRow.Height = 20;
dataGridView1.Rows.Add(dataGridRow);

Uobičajena upotreba DataGridView kontrole je prikaz podataka iz neke tabele ili drugog izvora podataka. Međutim, DataGridView kontrola se može iskoristiti za prikaz bilo kakvih podataka.  U gornjem primeru najpre je na formu dodata DataGridView kontrola da bi se izvršilo instanciranje odgovarajuće klase. DataGridView kontrola nije povezana ni sa jednim izvorom podataka. Zatim se kreiraju se dve kolone DataGridView kontrole. Prva kolona je tipa DataGridViewTextBoxColumn a druga kolona je tipa DataGridViewComboBoxColumn. Posle inicijalizacije ovih kolona moraju se dodati u Columns koleciju DataGridView kontrole čime se kreira struktura DataGridView kontrole. Zatim se iz koda kreira i jedna vrsta DataGridView kontrole. Da bi se kreirala vrsta prethodno je neophodno kreirati ćelije koje ulaze u sastav ove vrste. U primeru to su ćelije tipa DataGridViewTextBoxCell i DataGridViewComboBoxCell. Tip ćelije koja ulazi u sastav reda mora odgovarati tipu kolone kojoj ta ćelija pripada.


Prikaz kreirane DataGridView kontrole

 

Na slici je prikazana DataGridView kontrola čija je struktura (i podaci) kreirana iz koda u gornjem primeru.


Selekcija ćelije

DataGridView kontrola ima svojstvo SelectionMode koje može imati sledeće vrednosti: CellSelect, FullColumnSelect, FullRowSelect, ColumnHeaderSelect i RowHeaderSelect. Sam naziv moda selekcije ukazuje na to šta se može selektovati unutar DataGridView kontrole. Svojstvo MultiSelect postavljeno na vrednost True omogućava selektovanje više redova, kolona ili ćelija.


Svojstva DataGridView kontrole vezana za selekciju

SelectedCells svojstvo vraća kolekciju DataGridViewCell objekat nezavisno od moda selekcije DataGridView kontrole. Svojstvo SelectedRows daje kolekciju selektovanih vrsta, dok svojstvo SelectedColumns daje kolekciju selektovanih kolona DataGridView kontrole.


Provera selektovanih ćelija

private void button1_Click(object sender, EventArgs e)
{
    richTextBox1.AppendText("Ukupno selektovanih celija: " +
    dataGridView1.SelectedCells.Count.ToString() + " ");
    foreach (DataGridViewCell celija in dataGridView1.SelectedCells)
    { 
        richTextBox1.AppendText("vrsta: " + celija.RowIndex.ToString() + " kolona: "+ celija.ColumnIndex.ToString() + " vrednost celije: "  + celija.Value + " ");
    }
}

Pomoću svojstva SelectedCells DataGridView objekta pristupa se kolekciji selektovanih ćelija, tako da svojstvo Count ove kolekcije daje ukupan broj selektovanih ćelija. Primenom foreach petlje se prolazi kroz kolekciju selektovanih ćelija i za svaku od njih se prikazuje broj vrste i kolone kojima ćelija pripada kao i vrednost tj. podatak koji se nalazi u ćeliji.


Provera selektovanih ćelija - GUI

 

Na slici je prikazan korisnički interfejs aplikacije u kome se demonstrira kod dat u prethodnom primeru.


Ubacivanje ComboBox kontrole u ćeliju DataGridView kontrole

Najpre se izvrši povezivanje DataGridView kontrole sa tabelom iz baze podataka. Zatim se klikom na strelicu koja se nalazi u gornjem desnom uglu DataGridView kontrole otvara prozor DataGridView Tasks. Sada se u ovom prozoru odabere opcija Edit Columns... Selektuje se kolona kojoj želimo da promenimo tip. U primeru na slici DataGridView prikazuje Proizvode iz baze podataka Northwind. Tabela proizvoda je povezana sa tabelom kategorija posredstvom atributa CategoryID koji predstavlja ID kategorije. Želimo da korisniku umesto ovog atributa prikažemo naziv kategorije kome proizvod pripada. Za početak ćemo promeniti Header-ove kolone u Kategorije.


Promena tipa kolone

 

Sada ćemo koloni Kategorije promeniti tip. Umesto DataGridViewTextBoxColumn tipa kolone, postavićemo DataGridViewComboBoxColumn kolonu. Sada ovu kolonu treba povezati sa izvorom podataka, da bi podaci u tabeli proizvoda bili koegzistentni, odnosno da bi promena tipa kolone bila moguća.


Povezivanje ComboBox kolone sa izvorom podataka

 

Najpre se definiše DataSource svojstvo ComboBox kolone tj. tabela Categories iz DataSeta. Ovime se automatski kreira odgovarajući BindindSource objekat koji komunicira sa tabelom kategorija. Kao svojstvo DisplayMember postavi se kolona CategoryName tj. naziv kategorije, i to je vrednost koja će biti prikazana u ComboBox koloni. Kao svojstvo ValueMember postavi se kolona CategoryID, čime se omogućava veza sa starom TextBox kolonom.


Izgled DataGridView kontrole sa ComboBox kolonom

 

Na slici je prikazana DataGridView kontrola sa ubačenom ComboBox kolonom.

Dodaj komentar Sviđa mi se - (0) Ne sviđa mi se - (0)    

  • DataGridView kontrola 1
  • DataGridView kontrola 2
  • DataGridView kontrola 3
  • DataGridView kontrola 4