Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#] Datagrid probleem

Pagina: 1
Acties:

  • tha_crazy
  • Registratie: Maart 2007
  • Laatst online: 19:39
Hey.
Ik ben nu bezig met een project waarbij ik gebruik moet maken van een datagrid.
Dit werkt in combinatie van C# met een Access Datagrid.
Nu werkt echter als als ik een rij toevoeg het niet
ik krijg dan deze error "an object reference is not set to an instance of an object"

In de database worden 3 dingen opgeslagen
- customer ID (cid)
- Project description (Description)
- Status (status)

Status kan 2 waarden hebben:
- In progress
- Closed

Ik heb zelf ook al flink rond zitten zoeken maar ik kan er niks op vinden
heeft iemand een idee ?
dit is de code:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
         private void dgvProjects_UserAddedRow(object sender, DataGridViewRowEventArgs e)
        {
           
            Companys tmp = cbxCompanyName.SelectedItem as Companys;
            
            try
            {
                string qryInsertSecValues = "INSERT INTO Projects (Cid, Description, Status) VALUES (" + tmp.ID.ToString() + ", '" + e.Row.Cells[0].Value.ToString() + "', '" + e.Row.Cells[1].Value.ToString() + "')";
                OdbcCommand myodbccommand = new OdbcCommand(qryInsertSecValues);
                myodbccommand.Connection = TabStripApp.Singleton.Connector.Connection;
                myodbccommand.ExecuteNonQuery();
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.ToString());
            }
            
            
        }


Ik hoop voldoende informatie te hebben verschaft
zo niet, zeg het even :)

Groetjes, Vincent

  • Boss
  • Registratie: September 1999
  • Laatst online: 18:43

Boss

+1 Overgewaardeerd

Op welke regel krijg je de foutmelding?

Klinkt in ieder geval alsof de myodbccommand niet goed aangemaakt wordt. Als je daarna de .connection set krijg je een fout.

Om de fout beter te vinden misschien even de try..catch commenten?

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.


  • tha_crazy
  • Registratie: Maart 2007
  • Laatst online: 19:39
Ik heb er even een screenshot van gemaakt
http://www.ugf-hq.com/files/error.JPG

Maar de odbccommand zou moeten werken
Wij hebben dezelvde methode ook al gebruikt bij andere delen van de applicatie (user management enzo) en daar werkt hij prima

En ik zal even proberen zonder de catch method

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

Blijft nog steeds de vraag: op welke regel in de code die je hierboven geeft treedt die melding nu eigenlijk op? In de afbeelding die je geeft staat regel 246 maar dat zegt ons natuurlijk helemaal niks.

En wat heb je nu zelf al geprobeerd om dit op te lossen? "Ik heb al gezocht" zegt ons alweer helemaal niks ;) Al aan het debuggen geslagen?

[ Voor 26% gewijzigd door Creepy op 12-09-2007 11:55 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Depress
  • Registratie: Mei 2005
  • Laatst online: 24-11 21:01
Ik denk dat het fout gaat op deze regel:

Companys tmp = cbxCompanyName.SelectedItem as Companys;

Het selected item kan niet worden gekopierd omdat het Companys type niet compatible is met het type selectedItem.

  • L-VIS
  • Registratie: April 2005
  • Laatst online: 20:09
Ik gok op regel acht in jouw voorbeeld. Maar waarom gebruik je geen sqlParameters?

  • tha_crazy
  • Registratie: Maart 2007
  • Laatst online: 19:39
Creepy schreef op woensdag 12 september 2007 @ 11:54:
Blijft nog steeds de vraag: op welke regel in de code die je hierboven geeft treedt die melding nu eigenlijk op? In de afbeelding die je geeft staat regel 246 maar dat zegt ons natuurlijk helemaal niks.

En wat heb je nu zelf al geprobeerd om dit op te lossen? "Ik heb al gezocht" zegt ons alweer helemaal niks ;) Al aan het debuggen geslagen?
hij begint bij mij met de void op regel 239.
de query staat op 246.

Ik ben net even aan het debuggen geweest ja en daarop kwam uit dat e.Row.Cells[0].Value.ToString() NULL was en e.Row.Cells[1].Value.ToString() ook NULL was.

En voor zoeken
ik heb google afgespeurt op alles wat met datagridview en useraddedrows te maken heeft maar daar ben ik op niks uitgekomen
L-VIS schreef op woensdag 12 september 2007 @ 11:57:
Ik gok op regel acht in jouw voorbeeld. Maar waarom gebruik je geen sqlParameters?
Hoe bedoel je sqlParameters ?

  • L-VIS
  • Registratie: April 2005
  • Laatst online: 20:09
Hier meer info over SqlParameter. Zo ben je minder gevoelig voor Sql injectie. Misschien is dit minder gevaarlijk bij een datagrid, maar het is een good practice om je aan te leren dit te gebruiken.

Maar gaat dat event niet af als er een nieuwe lege rij wordt aangemaakt?

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

ik heb google afgespeurt op alles wat met datagridview en useraddedrows te maken heeft maar daar ben ik op niks uitgekomen
Op zich logisch, want deze fout heeft ook niets met een datagrid of database te maken. Zoals de foutmelding al aangeeft probeer je een property of methode aan te roepen van een object welke niet geinitialiseerd is.

C#:
1
2
string a = null;
int length = a.Length; //raises NullReferenceException


Als Cells[0] geen value heeft (null), dan kun je daar ook geen string van maken.
Wat je kunt doen is statements zoals
C#:
1
string value = (Cells[0].Value == null ? string.Empty : Cells[0].Value.ToString());

gebruiken.

If it isn't broken, fix it until it is..


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 20:45
Wederom een mooie reden om geen generieke exceptions af te vangen:
C#:
1
2
3
4
            catch (Exception Ex) 
            { 
                MessageBox.Show(Ex.ToString()); 
            } 

Als deze er niet had gestaan had Visual Studio (ik neem toch aan dat je die gebruikt) keurig naar de juiste regel gesprongen en waren de eerste vijf replies om te achterhalen waar het nu precies fout gaat niet nodig geweest.

Roomba E5 te koop


  • tha_crazy
  • Registratie: Maart 2007
  • Laatst online: 19:39
Ook zonder de catch kwam hij met die error zoals ik hierboven heb beschreven.

Nu zijn we echter met een andere methode bezig en dat is via validating.
Echter voegt die nu continu nieuwe rijen bij.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
        private void dgvProjects_RowValidated(object sender, DataGridViewCellEventArgs e)
        {
            DataGridViewRow row = dgvProjects.Rows[e.RowIndex]; 
            if (row.Tag == null || (bool)row.Tag == false)
                OnInsert(row);
            else
                OnUpdate(row);
        }

        private void dgvProjects_RowValidating(object sender, DataGridViewCellCancelEventArgs e)
        {
            DataGridViewRow row = dgvProjects.Rows[e.RowIndex];
            if (row.IsNewRow == true) return;

            e.Cancel = false;
            foreach (DataGridViewCell cell in row.Cells)
                if (cell.Value == null)
                {
                    e.Cancel = true;
                    break;
                }
        }

        private void OnInsert(DataGridViewRow e)
        {
            Companys tmp = cbxCompanyName.SelectedItem as Companys;
            string qryInsertSecValues = "INSERT INTO Projects (Cid, Description, Status) VALUES (" + tmp.ID.ToString() + ", '" + e.Cells[0].Value.ToString() + "', '" + e.Cells[1].Value.ToString() + "')";
            OdbcCommand myodbccommand = new OdbcCommand(qryInsertSecValues);
            myodbccommand.Connection = TabStripApp.Singleton.Connector.Connection;
            myodbccommand.ExecuteNonQuery();
        }

        private void OnUpdate(DataGridViewRow e)
        {
            MessageBox.Show("update");
        }

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:45

TeeDee

CQB 241

Ja, en nu? Krijg je een andere foutmelding of blijft de eerste foutmelding naar voren komen?
Stap eens met de Debugger door je
C#:
1
private void OnInsert(DataGridViewRow e) 
heen en bekijk (ik gok) je hele SqlQuery eens?

[ Voor 46% gewijzigd door TeeDee op 13-09-2007 15:13 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 30-11 15:10

Creepy

Tactical Espionage Splatterer

Wat in mijn eerste post hier ook stond dus:
En wat heb je nu zelf al geprobeerd om dit op te lossen? "Ik heb al gezocht" zegt ons alweer helemaal niks Al aan het debuggen geslagen?
Een vraag dumpen zonder aan te geven wat je zelf al hebt gedaan is hier eigenlijjk not done. We verwachten hier dat je minstens zelf al aan het debuggen bent geslagen (wat TeeDee ook aangeeft).

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1