Avatar billede Red0z Nybegynder
14. december 2009 - 14:45 Der er 13 kommentarer og
1 løsning

Søge i datagrid

Hey drengene!

Sidder og prøver at lave et søgefelt i mit lille program, tanken er at når jeg skriver noget ind i søgefeltet, så skal datagridet opdateres, så det indeholder alle navne eller lign. der passer til søgningen. :)

Dette er den kode som jeg har forsøgt at benytte i min Metode. :)


            DataView Dv = new DataView();
            Dv.ApplyDefaultSort = true;
            Dv.Table = databaseDataSet.Tables["KundeTable"];
            Dv.Find(textBox1.Text);      //Dette er bare et forvirret forsøg
           
            Dv.Sort.Contains (textBox1.Text);      //Det er dette også
            dataGridView2.DataSource = Dv;
Avatar billede mireigi Novice
15. december 2009 - 11:16 #1
Umiddelbart ville jeg gøre det således:

KODEN ER IKKE TESTET!


DataView Dv = new DataView();
Dv.ApplyDefaultSort = true;
DataTable Dt = databaseDataSet.Tables["KundeTable"];
Dv.Table = new DataTable();

foreach(DataRow row in dt.Rows)
{
  if(row.Cells["KundeNavn"].value == textBox1.Text)
      dv.Table.AddRow(row);
}

Dv.Sort();
dataGridView2.DataSource = Dv;
Avatar billede Red0z Nybegynder
16. december 2009 - 20:49 #2
Selve koden ser meget godt ud, på nær lige i IF delen, som jeg så har prøvet at ændre til en passende linie.

Her er det som det ser ud på min metode lige nu.

        {
       
            DataView Dv = new DataView();
            Dv.ApplyDefaultSort = true;
            DataTable Dt = databaseDataSet.Tables["KundeTable"];
            Dv.Table = new DataTable("Searchfield");

            foreach (DataRow row in Dt.Rows)
            {
                if (row.Table.Columns["KundeNavn"].Caption.Contains(textBox1.Text))
                    Dv.Table.Rows.Add(row);
            }

            Dv.ApplyDefaultSort = true;
            dataGridView2.DataSource = Dv;

        } 

Og når jeg kører dette får jeg følgende fejl.

NullReferenceException was unhandled
{"Objektreferencen er ikke indstillet til en forekomst af et objekt."}


Men føler det går nogle gode skridt den rigtige vej da. :)
Avatar billede mireigi Novice
16. december 2009 - 22:33 #3
Umiddelbart vil jeg mene at den fejler fordi den ikke kan finde en kolonne der hedder "KundeNavn". Prøv med dette i stedet:


DataTableColumn column = row.Table.Columns.Find("KundeNavn");
if (column != null && column.Caption.Contains(textBox1.Text)
{
    Dv.Table.Rows.Add(row);
}
Avatar billede mireigi Novice
16. december 2009 - 22:35 #4
Hvis den stadig fejler efter den ændring, er det "textBox1" den ikke kan finde. Hvis den ikke fejler, har den DataTable du anvender ikke de kolonnenavne du forventer og du skal derfor kigge på din datasource.
Avatar billede Red0z Nybegynder
16. december 2009 - 23:56 #5
Er du sikker på det hedder

DataTableColumn column = row.Table.Columns.Find("KundeNavn");

Fordi der er ikke noget der hedder .Find(); hos mig.. :S

Og undskyld hvis jeg svarer langsomt, men det er da jeg sidder og terper hver eneste mulighed ud for virkelig at lære C# Sproget da jeg er aspirant. :)
Avatar billede Red0z Nybegynder
17. december 2009 - 09:26 #6
Sad og rodede lidt med det igår og fik skrevet noget kode selv, det virker ikke endnu, men her er min kode.

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            if (textBox1.Text == "")
            {
                databaseDataSet.Tables["Searchfield"].Clear();
                dataGridView2.Update();
            }
            else
            {
                DataView Dv = new DataView();
                Dv.ApplyDefaultSort = true;
                DataTable Dt = databaseDataSet.Tables["KundeTable"];
                DataTable Sf = databaseDataSet.Tables["Searchfield"];
                DataRow column = Dt.Rows.Find("Navn");

                foreach (DataRow row in Dt.Rows)
                {               
                    if (column != null && column.Table.Columns.Contains(textBox1.Text))
                    {
                        Sf.Rows.Add(row);
                        searchfieldTableAdapter.Update(databaseDataSet);
                        searchfieldTableAdapter.Fill(databaseDataSet.Searchfield);
                        databaseDataSet.AcceptChanges();
                        dataGridView2.Update();
                    }

                }
            }
        }
Avatar billede Red0z Nybegynder
17. december 2009 - 13:28 #7
Er der evt. andre der har et input der kunne hjælpe mig videre i min kode ? :)

Når jeg skriver kommer der intet frem i tablen, hverken når jeg bare skrive det første bogstav i ordet, eller når jeg skriver hele ordet, nogle idéer ? :)
Avatar billede Red0z Nybegynder
17. december 2009 - 14:03 #8
Når jeg kommer til linien

if (column != null && column.Table.Columns.Contains(textBox1.Text))

Springer den videre da den ikke kan finde nogle der passer sammen.. Hvordan kan jeg få den til at søge efter ting der indeholder det ene bogstav, eller der matcher f.eks 2 sammensatte bogstaver?
Avatar billede Red0z Nybegynder
21. december 2009 - 12:46 #9
Er der slet ingen der har et godt råd ? :)
Avatar billede Red0z Nybegynder
28. december 2009 - 09:26 #10
Nu prøver jeg lige at skrive en opdatering her istedet for at lave en ny tråd, men har prøvet med denne method nu. :) Men når jeg bruger den får den fejl i:           

Dv.RowFilter = textBox1.Text;

Syntaksfejl: Der mangler en operand efter operatoren 'Larsen'.

       


private void textBox1_TextChanged(object sender, EventArgs e)
        {
            DataView Dv = new DataView(databaseDataSet.KundeTable);
            Dv.RowFilter = textBox1.Text + "%";

            dataGridView2.Rows.Add(Dv.Table);
        }
Avatar billede Syska Mester
28. december 2009 - 12:51 #11
Der mangler et eller andet i den ... og hvor bruger du:
Dv.RowFilter = textBox1.Text;

Og hvad indeholder: textBox1.Text ?

Og er det linjen:
Dv.RowFilter = textBox1.Text + "%"; som giver fejlen, den ligner hvad du hentyder til i topppen, men er ik' den samme ?

http://en.wikipedia.org/wiki/Operand

Hvis du læser på:
http://msdn.microsoft.com/en-us/library/system.data.dataview.rowfilter.aspx

Så er det måske fin syntax den er galt med ... de bruger

Dv.RowFilter = "City = 'SomeCity'";

dit ville så måske være:

Dv.RowFilter = "Name = 'Larsen%'";

Måske der skal bruges "Name LIKE 'Larsen%'"
hvis det er SQL syntax.

Håber det kan hjælpe.
Avatar billede Syska Mester
28. december 2009 - 12:52 #12
Avatar billede Red0z Nybegynder
29. december 2009 - 08:22 #13
Det er "Dv.RowFilter = textBox1.Text; "
som der fejler, og textBox1.Text er søge feltet hvor jeg skriver søgeordet. :)
Avatar billede Red0z Nybegynder
15. februar 2010 - 13:10 #14
Lukket :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester



IT-JOB

Danske Commodities A/S

IT Systems Engineer

AURA A/S

Data Engineer

De Nationale Geologiske Undersøgelser for Danmark og Grønland (GEUS)

IT-systemadministrator søges til GEUS