Programování
Form datagrid
Data grid view slouší k zobrazení data třeba z nějaké kolekce. Vhodné je pro to používat list s názvem BindingList
Na tuhle otázku, není potřeba umět připojení k databazi, jedná se pouze o práci s datagridem.
Sám o sobě má metody na přidávání uživatelem a pod, doporučuju je vypnout (viz obrazek).
Na tuhle otázku, není potřeba umět připojení k databazi, jedná se pouze o práci s datagridem.
Sám o sobě má metody na přidávání uživatelem a pod, doporučuju je vypnout (viz obrazek).
Přidání collums
Přes AutoSizeCollumnMode = fill udělá hezčí zobrazení
Přídávání hodnot ručně
Nejlehčím způsobem, co jde tak je rows.add(), ale musime vedět, že v tomto případě přidáváme params objektu a jeden objekt je jedna buňka.
Random rnd = new Random();
this.dataGridView1.Rows.Add("Jakub", 50);
this.dataGridView1.Rows.Add(new string("Adam"), rnd.Next(5,50) );
this.dataGridView1.Rows.Add(Color.Black, Color.Black.A); // Object, takže jde vložit cokoliv
Přídávání hodnot přes datasource
Do datagridu mužeme přidávat data přes datasource, což je například List a nebo preferovaně BindingList. Všechno musí dědit z IListSource
List nebo binding list nám umožnuje vypisovat vlastnosti z objektu, avšak musíme všechno správně připravit přidáváním collums.
Pokud přidáme collum, je potřeba vlastnost collumu DataPropertyName na název vlastnosti, kterou chceme vypsat. Pokud tak neuděláme a liší se názvy stane to co na obrázku. Tuto hodnotu můžeme změnit v UI.
IListSource je způsob jak udělat vlastní dataSource, nikoliv bindingList. Mužeme tam například i vložit array, ale musíme vracet, cokoliv co dědí z IList
List nebo binding list nám umožnuje vypisovat vlastnosti z objektu, avšak musíme všechno správně připravit přidáváním collums.
Pokud přidáme collum, je potřeba vlastnost collumu DataPropertyName na název vlastnosti, kterou chceme vypsat. Pokud tak neuděláme a liší se názvy stane to co na obrázku. Tuto hodnotu můžeme změnit v UI.
Zle
Dobře
List nebo BindingList
List se pouze seznam, který se neobnovuje automaticky. Pro automatickou obnovu je poteřeba odebrat datasource a zase přidat.
dataSource = null;
dataSource = NasList;
BindingList má event addingNew a ListChanged který mění hodntoy v datagridu.
IListSource je způsob jak udělat vlastní dataSource, nikoliv bindingList. Mužeme tam například i vložit array, ale musíme vracet, cokoliv co dědí z IList
public class PersonDataModel : IListSource
{
private BindingList<Person> data = new BindingList<Person>();
public bool ContainsListCollection => true;
public IList GetList()
{
return this.data;
}
}
Za předpokladu že AutoGenerateColumns = true (tyto hodnoty jsou ve tříde Person)
[browsable(false)] public int Id {get;set;}
// zakazuje výpis
[DisplayName("Jméno")] public string Name {get;set;}
// ukaže v tabulce název "Jméno" namísto Name
Vybírání hodnot podle kliknutí
Přidáme event cellClick, která má sender a DataGridViewCellEventArgs
sender - jedná se o datagridview
DataGridViewCellEventArgs - jedná se hodnotu, která má dvě proměné RowIndex a ColumnIndex
Na získání hodnot jsou tyto věci.
sender - jedná se o datagridview
DataGridViewCellEventArgs - jedná se hodnotu, která má dvě proměné RowIndex a ColumnIndex
Na získání hodnot jsou tyto věci.
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
var selectedItem = dataGridView1.SelectedCells[0].Value;
// Vybere přesně tu hodnotu, na kterou se kliklo
var item = dataGridView1.Rows[e.RowIndex].DataBoundItem;
// Vybere celý ten item na který se kliklo
}
Pokud nebudeme mít dispozici DataGridViewCellEventArgs
private void button1_Click(object sender, EventArgs e)
{
var selectedItem = dataGridView1.SelectedCells[0].Value;
// Vybere přesně tu hodnotu, na kterou se kliklo
var selectedRowIndex = dataGridView1.SelectedCells[0].RowIndex;
var item = dataGridView1.Rows[selectedRowIndex].DataBoundItem;
// Vybere celý ten item na který se kliklo
}