Diskuze: Vyhledávání v dataGrid
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 23 zpráv z 23.
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.
Textbox má event -> textChanged, takže když se změní text v TextBoxu zavolá se tato metoda. V této metodě si napíšeš kód například:
private void textBox1_TextChanged(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)// projizdim dataGrid
{
string hodnota = dataGridView1.Rows[i].Cells[indexBunkykterouChces].Value; // davam si hodnotu bunky do stringu
if (hodnota.Contains(textBox1.Text)) // jeslize ten string obsahuje text z Textboxu
dataGridView1.Rows[i].Selected = true; // oznacim radek
}
}
V podsatatěsi bys to mohl udělat jednoduše přes cyklus, kde projedeš všechny řádky.
for (int i = 0; i < dataGridView.Rows.Count; i++)
{
if (dataGridView.Rows[i].Cells[0].Value.StartsWith("Č")) //Pokud položka začíná na "Č"..//to Cells[0] říká, že se jedná o první sloupeček..
{
// i bude číslo řádku začínající na Č
// kdyžtak tam stačí přidate break; jinak v i bude poslední řádek začínající na Č
}
}
Mám to takto, ale je tam chyba:
Cannot implicitly convert type 'object' to 'string'. An explicit conversion
exists (are you missing a cast?)
private void bankaTextBox_TextChanged(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)// projizdim
dataGrid
{
string banka = dataGridView1.Rows[i].Cells[1].Value; // davam si hodnotu
bunky do stringu
if (banka.Contains(bankaTextBox.Text)) // jeslize ten string obsahuje
text z Textboxu
dataGridView1.Rows[i].Selected = true; // oznacim radek
}
}
No jasně, musíš mu říct, že chceš zapsat do proměnné banka string
string banka = dataGridView1.Rows[i].Cells[1].Value.ToString()
A mimochodem si tenhle řádek dej až do té podmínky if, jinak si budeš přepisovat proměnnou s každým cyklem.
To jsem taky zkoušel, ale po zadání do textBox aplikace spadne a zobrazí chybu: Object reference not set to an instance of an object.
banka = dataGridView1.Rows[i].Cells[1].Value.ToString();
Už vím čím to je. Problém je v tom, že ty máš v tom svém dataGridu spodní řádek, kterým můžeš přidávat další řádky. Program pak spadne když se k němu dostane, protože na tu prázdnou hodnotu nedokáže použít ToString(). Takže buď můžeš řádek na přidávání zrušit, nebo nebudeš projíždět všechny řádky (u Rows.Count dát -1) a nebo úplně nejlepší ten převod nedělat metodou ToString(), ale convertovat to na string:
private void bankaTextBox_TextChanged(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
if (Convert.ToString(dataGridView1.Rows[i].Cells[0].Value) == bankaTextBox.Text)
{
dataGridView1.Rows[i].Selected = true;
}
}
}
Teda přesněji u toho tvého udělat podmínku (pokud hledáš i část textu):
if (Convert.ToString(dataGridView1.Rows[i].Cells[0].Value).Contains(bankaTextBox.Text))
Mám ještě jeden dotaz. Po spuštění aplikace a načtení dat se mi v gridu označí první řádek a při vyhledání dat zůstane označen. Zkoušel jsem: dataGridView1.Rows[1].Selected = false;, ale to nefunguje
V pohodě, jinak tyhle věci včetně barev vybrané položky, barva textu
vybrané položky atd. se dají nastavit v Properties toho dataGridu, chce to
jen se trochu proklikat. 
Ještě bych potřeboval poradit jak vyřešit navigační tlačítka v gridu (první, poslední, následný, předchozí řádek), asi by to šlo odvodit od čísla právě vybraného řádku, ale nevím jak jeje získat.
To nevím moc jak myslíš navigační tlačítka, nebo spíš coby to
přesně dělalo.
Pomocí
souřadnic ve smyslu řádek, buňka můžeš brát a přepisovat libovolnou
buňku v gridu. Jinak první řádek máš v podstatě .Rows[0], poslední:
.Rowrs[dataGrid.Rows.Count], předposlední: .Rowrs[dataGrid.Rows.Count-1].
Samozřejmě ale dost záleží co přesně s tím chceš dělat.
Jde jen o listování v tabulce, select první, poslední řádek a předchozí a následný řádek od již vybraného vybraného řádku
Mělo by to selektovat buňky v celém řádku. První a poslední by mělo
být v pohodě,
první: dataGridView1.Rows[0].Selected = true;
poslední: nevím jak to napsat.
Předchozí: tam bych potřeboval získat "int číslo řádku", který má
"selected = true" a od toho odečíst 1
následný: stejně jako předchozí, jen přičíst 1
V Delphi byla přímo sada navigačních tlačítek, které se spojily s tabulkou a bylo to hotové
To je tady taky, jmenuje se to BindingNavigator. Jen záleží na tom, jak dostáváš do DGV ty data. Pokud sis přetáhl ten datagridview ze zdroje dat (v designeru), tak bys to tam měl mít...
Tak v podstatě index posledního řádku odpovídá číslu řádků tabulky:
dataGridView1.Rows.Count
Jinak číslo řádku, který je "vyselectován" se dá získat takto:
int cislo = dataGridView.CurrentRow.Index;
Což můžeš následně použít jako index +-1
Já to načítám přímo z tabulky databáze (SELECT * FROM Banky).
Ideální by bylo kdyby šel BindingNavigator spojit přímo s gridem.
Tak to by čistě teoreticky neměl být až takový problém. Jde v podstatě jen o tlačítka. V podstatě by to mohlo být v tomto duchu, například o posunutí o jedno:
int novaOznacenaPOlozka = dataGridView1.CurrentRow.Index + 1;
dataGridView1.Rows[dataGridView1.CurrentRow.Index].Selected = false;
dataGridView1.Rows[novaOznacenaPOlozka].Selected = true;
Tohle má ovšem jeden základná nedostatek a to, že se ve skutečnosti k
posunutí nedojde, to posunutí je jen vizuální. Ve WPF je na speciální
vlastnost dataGridu, kde se manipuluje s Itemy, ale v běžném WF mě nenapadá
jak se to dělá. 
Když si v designeru přidáš (ze zdroje dat přetažením tabulky na form)
DataGridView, tak se ti tam automaticky vytvoří i BindingNavigator, který je
propojený s tím DGV... 
Zobrazeno 23 zpráv z 23.