LINQ to SQL a BindingSource

Je to jen pár měsíců, co je na světě .net framework verze 3.5 a s ním spoustu cukrátek, které potěší nejednoho vývojáře na .netím frameworku. Někteří z nás sice vzhlížejí ještě kousek dál - třeba k ADO.NET Entity Frameworku, ale pro ty, kteřím stačí současný stav a pohrávají si s LINQ to SQL, tu mám jeden tip.

Přestože jsme na builderu nedokázali odhalit přesnou příčinu nefunkčnosti nad položenou otázkou LINQ + SQL + datagridview - uložení změn do db, snažil jsem se přijít na důvody, proč u tazatele daná kombinace nebyla funkční. Přiznám se hned na začátku, že jsem na rozumné vysvětlení nepřišel.

Jak propojit data na DataGridView

Vhodnou cestou jak napojit data z datového zdroje, v tomto případě tedy entit vytvořených pomocí LINQ to SQL, na DataGridView je použít objektu BindingSource. Při nastavení vlastnosti DataSource dojde k provázání dat se zobrazovacím prvkem a v případě, že máme povoleno na DataGridView přidávání, případně mazání řádků máme vše hotovo.

Skutečně nám tedy stačí, ve vhodnou chvíli volat událost SubmitChanges nad stejnou instancí DataContextu, jakou jsme naplnily BindingSource a o vše se postará interní logika. Není tak třeba registrovat se k žádným událostem - snad až na jedinou a tou je událost pro přidání nového záznamu AddingNew, a to jen v případě, že požadujeme mít nově přidaný objekt uživatelsky nainicializovaný.

Stejně tak není třeba notifikovat DataContext, lépe řečeno Table<TEntity> kolekci o nově přidaných objektech pomocí metody InsertOnSubmit, stejně tak jako psát kód navíc, abychom zjistili odstraňovanou položku z kolekce a tu mohli předat do metody DeleteOnSubmit.

Ukázka

Jak tedy může taková jednoduchá práce s DataGridView a jeho napojením na data vypadat? Následující část kódu je skutečné minimum:

// metoda pro získání dat z datového zdroje LINQ to SQL
private IEnumerable provideData() {
 var result = from data in _db.TestRows
  select data;
 return result;
}
// metoda pro uložení editovaných dat
private void saveClick(object sender, EventArgs e) {
  _db.SubmitChanges();
}

... // tam kde potrebujeme nahrát data a napojit je na zobrazovací prvek
bindingSource.DataSource = provideData();
...
builder.cz
Posted by: Jarda Jirava
Last revised: 21 Apr, 2008 05:37 PM History

Comments

No comments yet. Be the first!

Your Comments

Used for your gravatar. Not required. Will not be public.
Posting code? Indent it by four spaces to make it look nice. Learn more about Markdown.

Preview