Avatar billede ihtezaz Praktikant
31. oktober 2004 - 00:28 Der er 10 kommentarer og
1 løsning

kun 16 tegn bliver comited når jeg redigere i min datagrid

Hej

Jeg har en datagrid, hvor jeg redigere f.eks. navn, men problemmet er at hvis det navn jeg redigere til er længere end 16 tegn bliver de resterende simpelthen ikke gemt i databasen. Hvad kan årsagen være. Jeg har prøvet at sætte max length i den textbox redigeringen sker til 20, men det hjælper intet.

på forhånd tak
Avatar billede snepnet Nybegynder
31. oktober 2004 - 00:46 #1
det virker umiddelbart mest sansynligt, at du har angivet en feltlængde på 16 enten i databasen, eller et i dataset du bruger i forbindelse med opdatering.
mvh
Avatar billede snepnet Nybegynder
31. oktober 2004 - 00:48 #2
hvis det ikke er i basen problemet ligger, kan du bare smide koden herud.
mvh
Avatar billede ihtezaz Praktikant
31. oktober 2004 - 01:00 #3
det er ikke i db'en for første gang jeg indsætter dataen i db'en kan jeg indsætte mangle flere tegn end 16, og typen er nvarchar.

Her er kode stumpen:

private void dgOversigt_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
        {
           
            BindDatagrid();
                        DataRow[] dr = ds.Tables["Oversigt"].Select("LicensID="+dgOversigt.DataKeys[e.Item.ItemIndex]);
                                   
            // Sikre at der er nogle data
                        if(dr.Length > 0)
                        {
                            TextBox txtNyRegNoegle = new TextBox();
                            txtNyRegNoegle.MaxLength = 50;
                            txtNyRegNoegle = (TextBox)e.Item.Cells[11].Controls[0];
                            dr[0]["RegisteringsNoegle"] = txtNyRegNoegle.Text;
                            TextBox txtNyAnskafDato = new TextBox();
                            txtNyAnskafDato.MaxLength = 50;
                            txtNyAnskafDato = (TextBox)e.Item.Cells[12].Controls[0];
                            dr[0]["AnskaffetDato"] = txtNyAnskafDato.Text;

                            TextBox txtNyUdloebdato = (TextBox)e.Item.Cells[13].Controls[0];

                            if(!txtNyUdloebdato.Text.Equals("ingen"))
                            {
                                dr[0]["UdloebsDato"] = txtNyUdloebdato.Text;                               
                            }
                            else
                            {
                           
                            dr[0]["UdloebsDato"] = Convert.DBNull;
                            }

                        }
           
           
                        //Opdater DB'en
                       
       
            da.Update(ds,"Oversigt");
            dgOversigt.EditItemIndex = -1;
            dgOversigt.DataBind();
           
                    }           
        }
Avatar billede ihtezaz Praktikant
31. oktober 2004 - 01:01 #4
sorry der skulle stå "mange" istedet for "mangle"
Avatar billede snepnet Nybegynder
31. oktober 2004 - 02:06 #5
hej igen ihtezaz :o)

ds - er det et generisk dataset (altså bare af typen DataSet), eller er det noget du selv har lavet - hvis det sidste er tilfældet vil jeg gerne se koden til det.

at typen er nvarchar betyder ikke nødvendigvis at du kan proppe mere end 16 karakterer ind... den har en længde som angiver max.

jeg kan ikke få øje på noget i den kode du har sendt der skulle gøre, at du kun skulle kunne trække 16 karakterer ud af din tekstboks.

og dette :
TextBox txtNyRegNoegle = new TextBox();
txtNyRegNoegle.MaxLength = 50;
txtNyRegNoegle = (TextBox)e.Item.Cells[11].Controls[0];

at du sætter max-length der virker lidt underligt, når det bare er en reference til en tekstbox der findes i forvejen... denne her virker mere hensigtsmæssig :
TextBox txtNyRegNoegle = (TextBox)e.Item.Cells[11].Controls[0];

hvis du vil sætte en max-length bør du gøre det på det tidspunkt tektboksen bliver skabt for indtastning, og ikke efter der er indtastet i den.

hvad er det for en database du bruger - og har du eventuelt mulighed for at sende et createscript til tabellen ?

en sidste ting... opdaterer du ved hjælp af stored procedures ?
(så kunne det jo være der at der skete en trunkering, hvis din string bliver modtaget som en nvarchar(16)).

mvh

   

jeg vil meget gerne se mere kode.

mvh
Avatar billede ihtezaz Praktikant
31. oktober 2004 - 02:15 #6
Hejsa snepnet

Det er en alm. Dataset. Jeg bruger ms sql server 2000.
Jeg bruger ikke stored procedure, men sql statment inde i applikationen:

            ds.Tables["Oversigt"].Columns["RegisteringsNoegle"].MaxLength = 40;


Og binder datagridet således:

private void BindDatagrid()
        {
            da.Fill(ds,"Oversigt");
            dgOversigt.HeaderStyle.Height = new Unit("15px");
            dgOversigt.FooterStyle.Height = new Unit("15px");
   
            dgOversigt.DataSource = ds.Tables["Oversigt"];

            dgOversigt.DataBind();
       
        }
Avatar billede ihtezaz Praktikant
31. oktober 2004 - 02:16 #7
hov sorry det øverste kode skulle være:

SqlCommand sqlComUpdate = sqlCon.CreateCommand();
            sqlComUpdate.CommandType = CommandType.Text;
            sqlComUpdate.CommandText = "UPDATE Licens SET "
                +"RegisteringsNoegle = @regnoegle, AnskaffetDato = @anskafDato,UdloebsDato = @UdlDato "
                +"WHERE LicensID = @LicensID";
            sqlComUpdate.Parameters.Add("@regnoegle",SqlDbType.VarChar,16,"RegisteringsNoegle");
            sqlComUpdate.Parameters.Add("@anskafDato",SqlDbType.DateTime,8,"AnskaffetDato");
            sqlComUpdate.Parameters.Add("@UdlDato",SqlDbType.DateTime,8,"UdloebsDato");
            sqlComUpdate.Parameters.Add("@LicensID",SqlDbType.Int,4,"LicensID");

            sqlComUpdate.Parameters["@LicensID"].SourceVersion = DataRowVersion.Original;
           
           
            da.UpdateCommand = sqlComUpdate;
Avatar billede snepnet Nybegynder
31. oktober 2004 - 02:17 #8
her skriver du at den højst må være 16 karakterer.

sqlComUpdate.Parameters.Add("@regnoegle",SqlDbType.VarChar,16,"RegisteringsNoegle");

mvh
Avatar billede ihtezaz Praktikant
31. oktober 2004 - 02:18 #9
Damn...du havde ret..der står jo 16 i parameteren. Tak snepnet, u r the man. Smid svar
Avatar billede snepnet Nybegynder
31. oktober 2004 - 02:18 #10
sqlComUpdate.Parameters.Add("@regnoegle",SqlDbType.VarChar,<indsat samme længde som du har i basen her>,"RegisteringsNoegle");
Avatar billede snepnet Nybegynder
31. oktober 2004 - 02:19 #11
et svar skal du få :o)
mvh
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