Diskuze: DataGrid - Rows
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 14 zpráv z 14.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Koukni na style triggery.
Když jsem si hrál ještě s WPF, tak jsem dělal přesně něco podobného. Pro ukázku jak to vypadalo:
<Style x:Key="CellStyle" TargetType="DataGridCell">
<Setter Property="FontFamily" Value="Calibri"/>
<Setter Property="TextBlock.VerticalAlignment" Value="Center"/>
<Setter Property="Padding" Value="5,15"/>
<Setter Property="BorderThickness" Value="0"/>
<!--Allows padding in DataGridCell-->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type DataGridCell}">
<Border Padding="{TemplateBinding Padding}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
<ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding IsPast}" Value="True">
<Setter Property="Foreground" Value="#a8a8a8" />
<Setter Property="FontStyle" Value="Italic" />
<Setter Property="Opacity" Value="0.6"/>
</DataTrigger>
<DataTrigger Binding="{Binding IsSure}" Value="False">
<Setter Property="Foreground" Value="#FF999999" />
<Setter Property="FontStyle" Value="Italic" />
</DataTrigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="#FF3A3A3A"/>
<Setter Property="Opacity" Value="1"/>
</Trigger>
</Style.Triggers>
</Style>
Díky, ale nejdříve bych chtěl rozběhout ten cyklus.......
Todle je UI záležitost, takže to máš mít v XAMLu. Jestli to chceš psát někde do code-behind, počkej si na někoho jiného.
Právě, že bych to tak raději řešil, ale každopádně děkuju za tip, kouknu na to...
V tomto seriáli je niečo podobné, môžeš z toho výjsť.
6. díl - Upomínač narozenin v C# .NET WPF - Návrh oken
http://www.itnetwork.cz/…n-navrh-oken
Dotazem do DB bych zjistil řádky, u kterých se blíží konec platnosti a potom ty řádky obarvil, cyklem for
Máš nějaké zkušenosti s mazáním záznamů v DataGridu v WPF ? Je to pro mě prostě nadlidský úkol....
Mám
SqlCommand cmd = new SqlCommand("DELETE FROM Polozka WHERE ID = @ID", conn);
cmd.Parameters.AddWithValue("@ID", grdZaznamy.SelectedValue);
cmd.ExecuteNonQuery();
ale prostě nemohu zjistit jak smazat vybraný řádek.......
Něco podobného jsem v DataGridu dělal. Cyklus na zabarvování řádků
tam byl taky, jen podle jiných kritérií. Jenom už je to nejakou dobu, tak mi
dej chvíli než to najdu, pak sem ten cyklus hodim.
K tomu mazání:
S DataGridem byly furt nějaký problémy, tak sem nakonec vytvořil třídu
představující jeden řádek, naplnil jí public proměnejma podle
sloupečků, udělal z ní List<> a data z DB dával do toho listu. Pak
jsem jenom Datagridu nastavil ItemsSource na null a hned po tom na ten list (bez
null mi to tam dělalo bordel).
Ve výsledku sem vůbec nemusel řešit problémy s DataGridem, všechny změny
sem proved na tom Listu<> a ten sem pak jenom hodil do DataGridu.
Tak už to mam a i to obarvování sem částečně ochcal tim Listem<>, ale snad by to mohlo pomoct:
/// <summary>
/// Obarví prvky v tabulce
/// </summary>
private void iniColorGridRows() {
tabulka.ItemContainerGenerator.StatusChanged += (s, e) => { //už nevim proč, ale musí to tam bejt
int rowCount = tabulka.Items.Count; //počet řádků v DataGridu (tabulka)
int a = 0; //pomocná proměnná, spíš by se to mělo menovat cisloRadku nebo taknějak
foreach (var bedna in potahyList) { //tady se foreachem projede List<> ve kterym sou data do tabulky
if (a >= tabulka.Items.Count) //kdyby náhodou bylo v tabulce míň řádků
break;
var row = (DataGridRow)tabulka.ItemContainerGenerator.ContainerFromIndex(a);
//tady podle indexu (a) vytáhnu z tabulky jeden řádek a hodim ho do proměnný row.
//určitě by nějak šlo podle dalšího indexu zase z row vytáhnou to pole kde ty máš datum
//já už to měl v tom listu, tak sem to neřešil
if (row != null) { //a pokud ten řádek existuje
if (bedna.Kusu == bedna.Vlozeno)
row.Background = Brushes.Green; //tak se začne obarvovat
else if (bedna.Kusu > bedna.Vlozeno)
row.Background = Brushes.Orange;
else if (bedna.Kusu < bedna.Vlozeno)
row.Background = Brushes.Red;
else
row.Background = Brushes.Black;
a++; //pak se jenom zvýší číslo řádku a jede se znova
}
}
};
}
Teď bych si bejt tebou zjistil jak z tý proměnný row vytáhnout
podle indexu tu kolonku s datem, pak jenom vezmeš for cyklus podle
tabulka.Items.Count, postupně vytaháš do proměnný row řádky, u
každýho zjistíš datum a to porovnáš a podle něj obarvíš řádek přes
row.Background
Snad pomůže.
"Máš nějaké zkušenosti s mazáním záznamů v DataGridu v WPF ? Je to pro mě prostě nadlidský úkol...."
Ja používam ListBox na výpisy riadkov a tam mám nastavený výber riadka
po kliknutí myšou.
S vybratým si môžem robiť čo chcem, napr. zmazať.
V triede Skladnik (niečo ako admin) mám metódu:
public void OdoberDhmZaznam(DhmZaznam dhmZaznam)
{
DhmZaznamy.Remove(dhmZaznam);
}
a v main metódu
private void vymazDhmButton_Click(object sender, RoutedEventArgs e)
{
if (DhmListBox.SelectedItem != null)
{
if (MessageBox.Show("Naozaj to chcete vymazať?", "Vymazať", MessageBoxButton.OKCancel, MessageBoxImage.Question) == MessageBoxResult.OK)
{
try
{
skladnik.OdoberDhmZaznam((DhmZaznam)DhmListBox.SelectedItem);
skladnik.UlozDhmZaznamy();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Chyba", MessageBoxButton.OK,
MessageBoxImage.Error);
}
}
}
}
Ako som ti už písal vyššie, vychádzam z miestneho tutoriálu.
Podľa mňa nie je veľmi štastný nápad vyfarbovať vybrané riadky. Čo
keď je riadkov viac ako sa vôjde do okna?, Bude sa chcieť užívateľovi
scrolovať?
Možno by bolo lepšie (na pokyn - button alebo automaticky, keď taká udalosť
nastane) uložiť vybraté riadky do nového listu a ten vypísať do nového
okna.
v okně se zobrazuje asi 15 řádků a je to podle mě dostačující, je to
spíš pro použití pro pár osob v okolí... takže pokud se časem ukáže
že tam bude vícero záznamů, myslím, že to udělám podle tvého návrhnu

Zobrazeno 14 zpráv z 14.
