Avatar billede lasserasch Juniormester
08. november 2007 - 21:06 Der er 10 kommentarer og
1 løsning

Opdatere et gridview i ASP.NET

Hejsa.

Har lidt problemer med at forstå logikken omkring opdatering af min SQL database ud fra hvad jeg taster i et gridview.

Jeg har et gridview, som henter nogle records ud og viser på min webside.

Det virker fint. Så har jeg en Edit commando knap til hver linje.
Hvis jeg trykker på den, får jeg lov til at redigere den pågældende linje.

Jeg ville så gerne ved tryk på Update, kunne opdatere den pågældende record i min database.

Det forsøger jeg at gøre med følgende kode :

UpdateCommand="UPDATE dbo.tbinternaldepartments SET name = @name where id = @id">


Men @name er ikke den nye værdi jeg har indtastet. Det er den gamle værdi, inden jeg trykkede rediger.

Så hvordan får jeg fat i den nye værdi? Det er jo en textbox som jeg indtaster den nye værdi i, men denne bliver jo genereret automatisk af mit gridview, når man trykker på "Edit". Så hvordan ved jeg hvad denne textbox hedder, og hvordan kan jeg trække værdien ud?

Håber mit spørgsmål er bare lidt forståeligt.

/Lasse
Avatar billede neoman Novice
08. november 2007 - 21:29 #1
Not really - fortæl - er værdien "forkert" når RowUpdating kører eller på hvilket tidspunkt ? GridView plejer at kunne håndtere opdateringere ganske ok
Avatar billede neoman Novice
08. november 2007 - 21:35 #2
ellers  ligger dine data i myGridView.Rows(myRowIndex).Cells(cellIndex).text (hvor cellIndex er kolonneindekset) og du har ikke har templatefields, og rowIndex kan du fiske ud af et eller andet event e.row.rowIndex eller e.RowIndex eller noget
Avatar billede lasserasch Juniormester
08. november 2007 - 22:35 #3
Hmmm, nu prøver jeg lige at poste noget af den source VS genererer, og som jeg ikke kan få til at virke.

Når jeg forsøger at opdatere, siger den at mit felt i databasen ikke accepterer null værdier. Men forstår ikke hvorfor den vil sætte en null værdi ind.

Burde nedestående kode ikke opdatere min tabel med den nye værdi, som jeg taster i den textbox der kommer frem for hvert felt, når jeg trykker "edit" i mit grid?

--------

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AutoGenerateEditButton="True"
                        BackColor="LightGoldenrodYellow" BorderColor="Tan" BorderWidth="1px" CellPadding="2"
                        DataSourceID="employmentdb" Font-Size="XX-Small" ForeColor="Black" GridLines="None"
                        Width="100%" DataKeyNames="id,name,email,DeptOrder,IsCompleteMailReciever" DataMember="DefaultView">
                        <FooterStyle BackColor="Tan" />
                        <Columns>
                            <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" ReadOnly="True"
                                SortExpression="id" Visible="False" />
                            <asp:BoundField DataField="name" HeaderText="Afdeling" SortExpression="name" />
                            <asp:BoundField DataField="email" HeaderText="Tilknyttet Email" SortExpression="email" />
                            <asp:BoundField DataField="DeptOrder" HeaderText="Sortering V&#230;rdi" SortExpression="DeptOrder" />
                            <asp:BoundField DataField="IsCompleteMailReciever" HeaderText="Modtager Complete Mail"
                                SortExpression="IsCompleteMailReciever" />
                        </Columns>
                        <PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" />
                        <SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
                        <HeaderStyle BackColor="Tan" Font-Bold="True" />
                        <AlternatingRowStyle BackColor="PaleGoldenrod" />
                    </asp:GridView>
                    <asp:SqlDataSource ID="employmentdb" runat="server" ConnectionString="<%$ ConnectionStrings:EmployCreatingSystemConnectionString %>"
                        SelectCommand="SELECT id, name, email, DeptOrder, IsCompleteMailReciever FROM dbo.tbinternaldepartments"
                        UpdateCommand="UPDATE dbo.tbinternaldepartments SET name = @departmentname where id = @id">
                        <UpdateParameters>
                            <asp:ControlParameter ControlID="GridView1" Name="departmentname" PropertyName="SelectedRow.Cells[0].Text" />
                        </UpdateParameters>
                       
                    </asp:SqlDataSource>

------------


Den exception jeg får hedder :

--------

Cannot insert the value NULL into column 'name', table 'EmployCreatingSystem.dbo.tbinternaldepartments'; column does not allow nulls. UPDATE fails.
The statement has been terminated.
------------


/Lasse
Avatar billede neoman Novice
08. november 2007 - 22:47 #4
Din sqldatasource ting er lidt %&¤/&-up !

Det nemmeste er at lave den forfra og klikke på at den selv skal lave update/insetr/delete stuff, så kan du se hvordan det bør se ud.

                        UpdateCommand="UPDATE dbo.tbinternaldepartments SET name = @departmentname where id = @id">
                        <UpdateParameters>
                            <asp:ControlParameter ControlID="GridView1" Name="departmentname" PropertyName="SelectedRow.Cells[0].Text" />

1. Den får ikke noget id at spise
2. selected.rows.cells .bla bla er en usædvanlig formulering jeg ikke har set før:)

Det skal nok være:


                <UpdateParameters>
                    <asp:Parameter Name="id" Type="Int32" />
                  <asp:Parameter Name="departmentname" Type="String" />
                </UpdateParameters>

når gridviewet er bundet til sqldatasourcen, så ved sourcen hvor den skal kigge.
Avatar billede neoman Novice
08. november 2007 - 23:02 #5
og du skal nok også fjerne "name" fra DataKeyNames - jeg tror ikke den vil tillade at du opdaterer ting som står i den liste.
Avatar billede lasserasch Juniormester
08. november 2007 - 23:17 #6
Ok, har dog lige fundet ud af noget. Kan se at man kan læse en masse events for et gridview i .cs filen, hvor alt min anden kode jo også ligger. Det virker meget mere logisk for mig, at slette alt den "%&¤/&-up" kode, som du helt korrekt siger det ;-)

Og så selv lave en sql updaterings kode i en metode, som fyres af af nogle af de mange events der hører til.

Eller lyder det helt forkert?

Hvis ikke, så forstår jeg bare ikke hvorfor VS laver alt den kode uden for C# .cs filen.

Men måske jeg bare heller skal prøve at forstå alt ;-)

/Lasse
Avatar billede neoman Novice
08. november 2007 - 23:24 #7
Hmmm . nu er det altså ikke framworket der har &/%/%-up koden - hvem så ? :) Hvisdu nu trækker en sqldatasouce ind, og lader den lave hele mark-upen incl update/insert/delete, så kan du se hvordan det skal se ud:)

Og hvis du foretrækker at have sql i din cs så kan du da gøre det, men hvad skal du så bruge en sqldatasource til ? Tanken med en sqldatasource er nemlig træk/slip-data, uden at man skal rode for meget rundt. Hvsi du vil have meere kontrol så jo - så skal du selv  hente data og smide op i en tabel eller noget som gridviewet kan bindes op imod, og så selv lave update/insert/delete håndtering, som du ellers fpr i fri tilgift til et gridview gift med en datasource
Avatar billede neoman Novice
08. november 2007 - 23:25 #8
Hvis du ikke helt fatter alt det her så åbn din ServerExplorer, åbn din database og træk en tabel ind i din designer: så får du både gridview + datasource i et hug
Avatar billede neoman Novice
08. november 2007 - 23:28 #9
en sqldatasource er i princippet for prototyping - de fleste sværger ved objectdatasource bundet op til ens business objects.. og så er der afvigere som mig som klør på med typed data sets)
Avatar billede lasserasch Juniormester
23. november 2007 - 18:26 #10
ok, skal vi få lukket den her neoman! Smider du et svar?

/LAsse
Avatar billede lasserasch Juniormester
11. oktober 2010 - 20:41 #11
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