[ 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 ] @
Za prevod vb u c# koristi
http://www.developerfusion.com/tools/convert/vb-to-csharp/
[ 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"