[ neskokejdz @ 15.03.2010. 18:03 ] @
| Hteo bih da zamolim nekog ako moze da mi pomogne oko pretrage u C#-u,
radi se o sledecoj stvari...
Imam tabelu korisnik u bazi, sa njenim atributima, npr. naziv firme(koji je kriterijum za pretragu)...
Stvar je sledeca: kad upisem neko pocetno slovo u textbox treba da mi se u listview-u prikaze samo
naziv(i) koji pocinje sa tim slovom...
Hvala unapred!!! |
[ aca andrijevic @ 15.03.2010. 18:47 ] @
Ne radim u c#, ali evo kako sam to resio u vb.net, malo ga samo prilagodi:
Code: Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
ListView1.Items.Clear()
If TextBox1.Text = Nothing Then
ListView1.Items.Clear()
Try
oledbcon.Open()
str = "SELECT * FROM Korisnik ORDER BY Ime"
cmd = New OleDbCommand(str, oledbcon)
objRead = cmd.ExecuteReader
While objRead.Read
lv = Me.ListView1.Items.Add(objRead("Ime").ToString)
lv.SubItems.Add(objRead("Prezime").ToString)
End While
objRead.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
If ListView1.Items.Count = 0 Then
Else
ListView1.Items(0).Selected = True
ListView1.Select()
End If
oledbcon.Close()
End Try
End If
Try
oledbcon.Open()
str = "SELECT * FROM Korisnik WHERE Ime LIKE'" & TextBox1.Text & "%'"
cmd = New OleDbCommand(str, oledbcon)
objRead = cmd.ExecuteReader
While objRead.Read
lv = Me.ListView1.Items.Add(objRead("Ime").ToString)
lv.SubItems.Add(objRead("Prezime").ToString)
End While
objRead.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
oledbcon.Close()
End Try
End Sub
[ AMD guy @ 15.03.2010. 19:59 ] @
[ Laki123 @ 15.03.2010. 22:30 ] @
Primer u C#. Prva tri reda su globalna za celu formu. Kod učitavanja forme, pomoću data adaptera učitaš podatke iz baze u data set. Zatim napraviš objekat DataView. U događaju TextChanged samo pozivaš svojstvo RowFilter. Znači ne moraš svaki put uzimati podatke iz baze, što će verovatno imati efekta na brzinu, mana je naravno što ćeš celu tabelu imati u memoriji.
Code:
OleDbConnection konekcija = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\\Database1.mdb");
DataSet ds = new DataSet();
DataView pogled;
public Form1()
{
InitializeComponent();
string upit = "SELECT * FROM Korisnik";
OleDbDataAdapter adapter = new OleDbDataAdapter(upit, konekcija);
adapter.Fill(ds);
pogled = new DataView(ds.Tables[0])
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
pogled.RowFilter = "[Naziv firme] LIKE '" + textBox1.Text + "%'";
dataGridView1.DataSource = pogled;
}
I drugi način je sličan kao u prethodnom postu:
Code:
private void textBox1_TextChanged(object sender, EventArgs e)
{
OleDbConnection OleDbKonekcija = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\\Database1.mdb");
OleDbCommand komanda = OleDbKonekcija.CreateCommand();
DataTable rezultat = new DataTable();
komanda.CommandText = "SELECT * FROM Korisnik WHERE [Naziv firme] LIKE '" + textBox1.Text + "%'";
try
{
komanda.Connection.Open();
OleDbDataReader citac = komanda.ExecuteReader();
rezultat.Load(citac); //ucitavanje podataka u DataTable
citac.Close();
dataGridView1.DataSource = rezultat;
}
catch
{
}
finally
{
komanda.Connection.Close(); //na kraju se zatvara konekcija
}
}
Uf, sad tek vidim da tebi treba prikaz u ListView, a ja korisio GridView
[Ovu poruku je menjao Laki123 dana 15.03.2010. u 23:40 GMT+1]
[ neskokejdz @ 17.03.2010. 10:47 ] @
Hvala puno na odgovoru, znaci mi, samo ako bi neko mogao da mi pojasni kako bi to mogao da uradim sa ListView kontrolom,
umesto DataGridView-a.
Hvala unapred.....
[ Laki123 @ 19.03.2010. 12:32 ] @
Citat: neskokejdz: Hvala puno na odgovoru, znaci mi, samo ako bi neko mogao da mi pojasni kako bi to mogao da uradim sa ListView kontrolom,
umesto DataGridView-a.
Hvala unapred.....
Svojstvo kontrole listView1 View možeš postaviti na List.
Code:
private void textBox1_TextChanged_1(object sender, EventArgs e)
{
listView1.Items.Clear();
OleDbConnection OleDbKonekcija = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=c:\\Database1.mdb");
OleDbCommand komanda = OleDbKonekcija.CreateCommand();
komanda.CommandText = "SELECT * FROM Korisnik WHERE [Naziv firme] LIKE '" + textBox1.Text + "%'"; //umesto * možeš navesti samo [Naziv firme]
try
{
komanda.Connection.Open();
OleDbDataReader citac = komanda.ExecuteReader();
while (citac.Read())
{
listView1.Items.Add(citac["Naziv firme"].ToString());
}
}
catch
{
}
finally
{
komanda.Connection.Close(); //na kraju se zatvara konekcija
}
}
[ neskokejdz @ 22.03.2010. 04:48 ] @
Video sam da je kod u redu, probao ali nece da pretrazuje verovatno zbog naziva kolone u bazi podataka...
Kriterijum po kom zelim da mi se pretrazuje u textboxu je ImeDuznika(ovo je tacan naziv kolone u tabeli u bazi podataka)...
Znaci npr. imam sacuvanog duznika pod nazivom Kristal, kada ukucam u textbox K, zelim da mi ispise sve duznike pod tim pocetnim slovom...
Sta treba tacno napisati u onom delu koda gde je SQL upit???
Jer je to kljucna stvar....
Hvala na pomoci, znacila mi je jako puno, pogotovu zbog ucenja!!!
[ Laki123 @ 22.03.2010. 09:09 ] @
Pa samo umesto [Naziv firme] staviš ImeDuznika, a naziv tabele ako nije Korisnik, onda i to izmeniš (u uglastu zagradu stavljaš ako ima razmak između).
[ neskokejdz @ 22.03.2010. 10:34 ] @
Sve je to ok, i razumem ga, ali zasto mi kad unesem neko slovo u textbox on prikaze prazan Listview?
Znaci ako je duznik Kristal, ja kucam K, a on pokazuje prazan Listview...
[ AMD guy @ 22.03.2010. 10:42 ] @
Pa zbog ovoga
Code: komanda.CommandText = "SELECT * FROM Korisnik WHERE [Naziv firme] LIKE '" + textBox1.Text + "%'"; //umesto * možeš navesti samo [Naziv firme]
Ovo selektuje sve iz tabele Korisnik gde je jedini uslov uneti text iz textbox-a i popunjuje listview.
[ neskokejdz @ 22.03.2010. 18:07 ] @
Razumem to.. I kad stavim ovako, umesto * ImeDuznik
komanda.CommandText = "SELECT ImeDuznik FROM Duznik WHERE ImeDuznik LIKE '" + tbDuznik.Text + "%'"; //umesto * možeš navesti samo [Naziv firme]
ne radi opet... Ne znam zasto???
[ aca andrijevic @ 22.03.2010. 20:22 ] @
Upload-uj tvoj projekat ovde, pa da vidimo.
[ neskokejdz @ 23.03.2010. 00:19 ] @
Evo ga projekat....
[ aca andrijevic @ 23.03.2010. 07:54 ] @
Prvo ne treba ti:
Code: komanda.CommandText = "SELECT ImeDuznik FROM Duznik WHERE ImeDuznik LIKE '" + tbDuznik.Text + "%'"; //umesto * možeš navesti samo [Naziv firme]
nego samo Code: komanda.CommandText = "SELECT * FROM Duznik WHERE ImeDuznik LIKE '" + tbDuznik.Text + "%'"; //umesto * možeš navesti samo [Naziv firme]
Drugo mozes da probas da proglasis na primer:
Code: ListViewItem lv = new ListViewItem();
pa tek onda:
Code: while (citac.Read())
{
lv = listViewDuznici.Items.Add(citac["ImeDuznik"].ToString());
}
I stavljaj exceptions za testiranja.Doduse to sam uradi jer nije isto kod mene za VB.NET i C#.
[ AMD guy @ 23.03.2010. 10:04 ] @
Jedno pitanje neskokejdz.
Zasto konekcioni string cuvas u txt fajlu?
Mislim na ovo
Code (csharp):
public static string CitajFajl ()
{
string conn ;
TextReader tr = new StreamReader ("conn_str.txt");
conn = tr .ReadLine();
tr .Close();
return conn ;
}
[ neskokejdz @ 23.03.2010. 10:59 ] @
Opet nece, ne znam samo zasto on kad upisem neko slovo u textbox, skroz isprazni listview, a ne ostavi u njemu
onaj naziv koji zadovoljava uneti karakter u pretrazi?!
[ neskokejdz @ 23.03.2010. 11:00 ] @
To mi je neka praksa za lakse snalazenje, sto?
Mislim mozda da to ne valja?
[ AMD guy @ 23.03.2010. 11:12 ] @
Pitam onako, ja ga cuvam u app.configu ili kao string u sorsu.
[ Laki123 @ 24.03.2010. 12:04 ] @
Ne znam zašto ne radi, verovatno je problem u SQL komandi, ovaj primer radi u Accessu. Možda probaj u samom SQL Serveru da izvršiš primer SQL naredbe, npr. SELECT ImeDuznik FROM Duznik WHERE ImeDuznik LIKE 'k%'.
Inače probaj možda da prilagodiš onaj prvi primer što sam dao, s obzirom da koristiš dataset i imaš metodu za prikaz PrikaziDuznike().
Nešto ovako.
Code:
KamateDataSet kds = new KamateDataSet();
DuznikTableAdapter dta = new DuznikTableAdapter();
DataView pogled; // ovo je dodato u tvom kodu
private void frmDuznik_Load(object sender, EventArgs e)
{
dta.Fill(kds.Duznik);
pogled = new DataView(kds.Duznik); // ovo je dodato u tvom kodu
PrikaziDuznike();
}
private void tbDuznik_TextChanged(object sender, EventArgs e)
{
pogled.RowFilter = "ImeDuznik LIKE '" + tbDuznik.Text + "%'";
PrikaziDuznike();
}
private void PrikaziDuznike()
{
listViewDuznici.Items.Clear();
//Prikazivanje podataka o duznicima u ListView-u pomocu tipiziranog DataSet-a
foreach (KamateDataSet.DuznikRow vrsta in pogled.Table.Rows) // ovo je izmenjeno u tvom kodu
{
ListViewItem lvi = new ListViewItem(vrsta.ImeDuznik);
lvi.SubItems.Add(vrsta.MestoDuz);
lvi.SubItems.Add(vrsta.FixTel);
//U Tag smestamo id duznika
lvi.Tag = vrsta.DuznikID;
listViewDuznici.Items.Add(lvi);
}
}
Nisam siguran da li će ovo raditi, ali možda probaj dodatno da prilagodiš PrikaziDuznike(), ili probaj kroz debager da vidiš zašto onaj prethodni primer ne radi.
[ mish_ns @ 24.03.2010. 14:48 ] @
Ajd stavi i bazu ako nije problem...pa da vidimo sta se desava.
Sto se tice connection stringa mozes i ovako
app.config
Code:
<appSettings>
<add key="sqlConnectionString" value="Data Source=.\SQLEXPRESS;Initial Catalog=kamate;Integrated Security=True"/>
</appSettings>
i u kodu
Code:
SqlConnection objConnection = new SqlConnection(ConfigurationSettings.AppSettings["sqlConnectionString"]);
[ neskokejdz @ 24.03.2010. 18:24 ] @
Baza se nalazi u projektu, u pitanju je .bak fajl...
Back up-ovao sam je iz Sql Management studia...
[ mish_ns @ 24.03.2010. 20:46 ] @
Evo probaj ovako, meni radi...satvi KeyUp dogadjaj
Code:
private void tbDuznik_KeyUp(object sender, KeyEventArgs e)
{
listViewDuznici.Items.Clear();
SqlConnection SqlKonekcija = new SqlConnection("Data Source=.\\SQLEXPRESS;Initial Catalog=Kamate;Integrated Security=True");
SqlCommand komanda = SqlKonekcija.CreateCommand();
komanda.CommandText = "SELECT * FROM Duznik WHERE ImeDuznik LIKE '" + tbDuznik.Text + "%'";
try
{
komanda.Connection.Open();
SqlDataReader citac = komanda.ExecuteReader();
while (citac.Read())
{
listViewDuznici.Items.Add(citac["ImeDuznik"].ToString());
}
}
catch
{
}
finally
{
komanda.Connection.Close(); //na kraju se zatvara konekcija
}
}
Nadam se da je to to...javi kako je proslo.
[ ravni @ 25.03.2010. 06:17 ] @
razmisli ipak da iskoristis ovaj kod, ili neki njemu slican - stvarno nema smisla da zbog svakog slova ides na bazu
[quote] Laki123: ...
private void tbDuznik_TextChanged(object sender, EventArgs e)
{
pogled.RowFilter = "ImeDuznik LIKE '" + tbDuznik.Text + "%'";
PrikaziDuznike();
}
private void PrikaziDuznike()
{
listViewDuznici.Items.Clear();
//Prikazivanje podataka o duznicima u ListView-u pomocu tipiziranog DataSet-a
foreach (KamateDataSet.DuznikRow vrsta in pogled.Table.Rows) // ovo je izmenjeno u tvom kodu
{
ListViewItem lvi = new ListViewItem(vrsta.ImeDuznik);
lvi.SubItems.Add(vrsta.MestoDuz);
lvi.SubItems.Add(vrsta.FixTel);
//U Tag smestamo id duznika
lvi.Tag = vrsta.DuznikID;
listViewDuznici.Items.Add(lvi);
}
}
[/code]
[ neskokejdz @ 25.03.2010. 20:09 ] @
Mish_Ns, radi!!! Hvala puno, to je bas ono sto sam zeleo da uradim...
Hvala puno svima na pomoci, genijalni ste...
Ako nesto treba tu sam...
[ mish_ns @ 25.03.2010. 21:19 ] @
Dugujes mi "Votku i dzin" 
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|