DODATAK 1: DataGridView kontrola
Jedan način popunjavanja podataka iz baze u DataGridView:
***Connection konekcija = new ***Connection(konStr);
***Command komanda = new ***Command("select * from boja", konekcija);
komanda.ExecuteNonQuery();
DataTable tabela = new DataTable();
***DataAdapter adapter = new ***DataAdapter(komanda);
adapter.Fill(tabela);
dataGridView1.DataSource = tabela;
U nastavku je dosta više detalja o kontroli:
DataGridView
DataGridView je kontrola 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;
// ili
dataGridView1.DataSource = nds;
dataGridView1.DataMember = "Products";
Prvi način je sa se pomoću svojstva DataSource specificira tabela iz 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 dizajn 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: ↓↑ sakrij / prikaži ↓↑ detaljnije objašnjenje
- 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.
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.
Primer prikaza 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.
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.
- 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.
↑ sakrij ove detalje ↑
Kreiranje DataGridView kontrole koja nije povezana sa izvorom podataka: (Klik za prikaz/sakrivanje)
DataGridViewTextBoxColumn col1 = new DataGridViewTextBoxColumn();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 kolekciju 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 ovom primeru to su ćelije tipa DataGridViewTextBoxCell i DataGridViewComboBoxCell. Tip ćelije koja ulazi u sastav reda mora odgovarati tipu kolone kojoj ta ćelija pripada.
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);
Selekcija ćelije : klik za prikaz / sakrivanje detalja
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.
Primer: Provera selektovanih ćelija (Klik za prikaz/sakrivanje)
private void button1_Click(object sender, EventArgs e)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.
{
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 + " ");
}
}