Diskuze: Odkládací prostor v C#
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 19 zpráv z 19.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Veřejným proměnným se snaž vyhnout, pokud to jde.
To co hledáš je asi klíčové slovo static .
Ve VB.NET jsem si do toho uložil např
Dim email As String
a pak jsem to mohl použít kdekoliv a nemusel jsem to v každém formu znovu deklarovat...
třeba takhle:
internal static class Spolecne
{
public const String Email = "[email protected]";
...
}
a pak třeba výpis do konzole by byl takhle:
Console.Write(Spolecne.Email);
takhle by to šlo, ale mě šlo spíš o to, abych si tu "proměnnou" mohl
plnit z nějakého formu, třeba z textboxu a pak to použít v druhém formu
jako "vstup"...
Doufám, že jsem to napsal tak, aby se to dalo pochopit...
Když by jsi tu proměnnou chtěl měnit, tak stačí jen odebrat to slůvko const a můžeš ji měnit.
Ale v případě, co popisuješ, by bylo správné řešení ty data předávat přímo tomu druhému formuláři - ideálně v konstruktoru (pokud ten druhý formulář je teprve vytvářen) a nebo funkcí, pokud už existuje.
V podstatě mi jde taky o toto:
Mám form (např.: SeznamForm), v něm je DataGridView s daty z databáze a v
druhém formu (např.: DetailForm) jsou jednotlivé textboxy, které jsou
plněny daty z toho SeznamForm(z DGV), abych data mohl editovat. Jak toto
provedu v C#?
Ve VB.NET jsem se jednoduše v DetailForm odkázal na SeznamForm.DataGridView
a vybraný řádek, ale v C# toto takhle nefunguje...
Zkoušel jsem to právě přes nějakou proměnnou, která by se plnila podle
toho, který záznam bych vybral, ale to taky neumim.
Už jsem z toho srnec, daněk, jelen...
Máš dvě možnosti - jednodušší, ale z pohledu OOP prasárna je, že vlezeš do SeznamForm.Designer.cs a ten DGV si nastavíš na public (případně i static, pokud v DetailFormu na tu instanci SeznaFormu nevidíš).
Ta správná je, že pokud DetailForm teprv vytváříš, tak mu do konstruktoru přidáš parametr toho řádku z DGV - předpokládám, že je to asi typ DataGridViewRow) a ten pak v tom konstruktoru zpracuješ.
Případně pokud ten DetailForm má umět i mazání/vytváření apod., tak si můžeš předávat do DetailFormu celý GridView.
Radši bych použil ten správný způsob, mohl bys prosím uvést nějaký
příklad toho správného zápisu? Jak "předat" do DetailFormu celý DGV?
Teoreticky vím, jak by to mělo systémově fungovat, ale prakticky vůbec
netuším, jak to napsat...
Edit:
Chtěl bych, abych po vybrání řádku a stisknutí tlačítka viděl v
DetailForm jednotlivé položky vybraného řádku...
Veřejné proměné by se v programu neměli vůbec vyskytovat, vždy by měli být dostupné jen přes metody. Případně u vlastností jen přes gettery a settery.
Nezkoušel jsem to, takže tam může být nějaký překlep nebo se nějaká
funkce může jmenovat trochu jinak, ale snad to z toho půjde pochopit
DetailForm:
Vytvoř si DetailForm, naházej si na něj ty controly pro výpis těch
různých položek a konstruktoru přidej parametr typu DataGridViewRow nebo jak
se jmenuje.
Ještě do toho DetailFormu přidej proměnnou, kde si budeš udržovat ten řádek - třeba něco jako
private DataGridViewRow data = null;
a v tom konstruktoru mu přiřaď to, co ti přišlo v tom parametru.
public DetailForm(DataGridViewRow dataRow)
{
this.data = dataRow
}
Pak tam ještě připiš kód, co ti to z toho DataGridViewRow data načte do těch controlů - ideálně asi do eventu OnLoad.
Pak si obsluž tlačítko na uložení těch dat - aby to zase všechny změny uložilo do toho data a tlačítko storno, co jen ten formulář zavře (případně se předtím ještě zeptá, jestli nechce uložit změny).
SeznamForm:
při kliku na Editovat (nebo jak to tam máš)
DetailForm f = new DetailForm(mujDataGridView.SelectedRows[0]); // zavola konstruktor detailformu a jako parametr mu preda vybrany radek
f.ShowDialog();
Module je statická třída
Module Nazev
Public Dim x = 5
End Module
static class {
public static int x = 5;
}
a ten
static class {
public static int x = 5;
}
mám dát do čeho?
Našel jsem tam něco jako module (aspoň si to myslím) "CodeFile.cs", ale
nevím, jestli je to ono...
No dáš to jak u modulu do stejnojmenného souboru s příponou cs.
Hurááááá, konečně jsem pochopil (já patupák), jak se v C#
předávají hodnoty z jednoho formu do druhého... Juchůůůůůů
Jak jsi to nakonec udělal? Přes konstruktor nebo prasácky?
Konečně jsem pochopil, jak to funguje přes ten konstruktor, kam co napsat,
takže přes konstruktor...
Dííííííííííííííííííky
Zobrazeno 19 zpráv z 19.