Využij akce až 30 % zdarma při nákupu e-learningu. Více informací. Zároveň je tento týden sleva až 80 % na e-learning týkající se C# .NET
Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
Avatar
M6692
Člen
Avatar
M6692:17.9.2020 21:01

V aplikácii mám dva spôsoby hľadania, jeden pomocou tlačidla btnHľadaj a druhé pomocou vkladania hodnôt do textBox1. Tu sú oba druhy hľadania :

     DataTable dt = new DataTable();

private void btnHladaj_Click(object sender, EventArgs e)
 {

     SqlCommand cmd = new SqlCommand("SELECT * FROM Databaza", con);

     DataTable dt = new DataTable();

     con.Open();
     SqlDataReader dr = cmd.ExecuteReader();
     dt.Load(dr);
     con.Close();

     dataGridView1.DataSource = dt;


     BindingSource bs = new BindingSource();
     bs.DataSource = dataGridView1.DataSource;

     string filter = "";

     // Check if text fields are not null before adding to filter.
     if (!string.IsNullOrEmpty(comboDruh.Text))
     {
         filter += dataGridView1.Columns["Druh"].HeaderText.ToString() + " LIKE '%" + comboDruh.Text + "%' ";
     }
     if (!string.IsNullOrEmpty(comboKategoria.Text))
     {
         if (filter.Length > 0) filter += "AND ";
         filter += dataGridView1.Columns["Kategoria"].HeaderText.ToString() + " LIKE '%" + comboKategoria.Text + "%' ";
     }
     if (!string.IsNullOrEmpty(comboMeno.Text))
     {
         if (filter.Length > 0) filter += "AND ";
         filter += dataGridView1.Columns["Meno"].HeaderText.ToString() + " LIKE '%" + comboMeno.Text.Substring(0, comboMeno.Text.Length - 5) + "%' ";
     }

     bs.Filter = filter;
     dataGridView1.DataSource = bs;
private void textBox1_TextChanged(object sender, EventArgs e)
{
    DataView dv = dt.DefaultView;
    dv.RowFilter = string.Format("Poznamka LIKE '%{0}%'", textBox1.Text);
    dataGridView1.DataSource = dv.ToTable();
}

Zkusil jsem: Potreboval by som aby mi to po vyhľadaní pomocou tlačidla btnHladaj zobrazilo v datagride údaje (toto mi funguje). Následne po vložení hodnoty do texBox1 hľadalo v tých záznamoch ktoré boli vyhľadané pobocou btnHladaj. Teraz mi to hľadá v celej databáze, pravdepodobne pre toto

DataView dv = dt.DefaultView;

Chci docílit: Ďakujem

 
Odpovědět
17.9.2020 21:01
Avatar
JerryM
Člen
Avatar
JerryM:19.9.2020 11:02

asi si budeš muset nějak označit již prohledané záznamy a nebo ty prohledané přetáhnout do další nové dočasné tabulky ...

 
Nahoru Odpovědět
19.9.2020 11:02
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:23.9.2020 12:59

Zalezi na tom, co presne s tim dal chces delat.
Pokud nad tim budes pouzivat sql prikazy, pak bys je mel pridat k puvodnimu sql prikazu.
Pokud to taha vysledky pro prvni dotaz dlouho a druhe fitrovani by bylo rychlejsi nad vysledky, tak si vysledky ulozis do pomocne tabulky a nebo jednoho stringu, podle toho, zda chces vyhledavat v tabulce nebo ti staci vyhledavat string v text stringu.
Jako, kdyz mas web stranku, das ctrl+f a vyplnis tam tak, tak to myslim, to druhe vyhledavani; to by slo udelat, ze vyhledava v radcich a sloupcich.

 
Nahoru Odpovědět
23.9.2020 12:59
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
M6692
Člen
Avatar
M6692:24.9.2020 21:31

Ďakujem za odpovede, aj ja som rozmýšľal takým smerom, že si tie prvé odfiltrované údaje odložiť do nejakej dočasnej tabuľky a následne túto tabuľku prehľadávať pomocou textBox1_TextChan­ged. Skúšal som to všeliako, zatiaľ sa mi to nedarí správne zapísať, tak aby mi to fungovalo.

 
Nahoru Odpovědět
24.9.2020 21:31
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:25.9.2020 9:25

Jeste mozna 1 tip. Tab0 filtrujes, ulozis do tab1. Ale dalsi vysledek filtrovani musis ulozit do dalsi tabulky, tab2, pokud chces tab1 jeste pouzit.

tab0; // zdroj
tab1 = filter(tab0, filter1); // prvni vysledky
tab2 = filter(tab1, filter2); // druhe vysledky
vypis(tab2);
tab2 = filter(tab1, filter3); // druhe vysledky pro jiny filtr
vypis(tab2);
 
Nahoru Odpovědět
25.9.2020 9:25
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.