Avatar billede jaffafo Nybegynder
09. maj 2004 - 14:09 Der er 16 kommentarer og
1 løsning

Hjælp til Datagrid

Jeg prøver at lave en adminstration med en datagrid, men får en fejl:

Exception Details: System.InvalidOperationException: Dynamic SQL generation for the DeleteCommand is not supported against a SelectCommand that does not return any key column information.

i linje 118:

Line 116:        objTable = objDataSet.Tables("Nyheder")       
Line 117:        Dim objcommandbuilder as new oledbcommandbuilder(objDataAdapter)
Line 118:        objDataAdapter.deletecommand = objcommandbuilder.getdeletecommand()
Line 119:        objDataAdapter.insertcommand = objcommandbuilder.getinsertcommand()
Line 120:        objDataAdapter.updatecommand = objcommandbuilder.getupdatecommand()
Avatar billede jakobg Nybegynder
09. maj 2004 - 17:04 #1
Hvordan ser din SELECT statement ud?
Avatar billede jaffafo Nybegynder
09. maj 2004 - 18:31 #2
SELECT * FROM Nyheder

men..  det er ikke problemet..  Datagrid'en bliver "fyldt", men når jeg har lavet det jeg skal, med at smide nye nyheder og retter eller lignende og så skal gemme det så kommer fejlen..  dvs den læser det men skriver ikke i db'en...

Jeg bruger disconnected data
Avatar billede jaffafo Nybegynder
09. maj 2004 - 18:31 #3
dvs den generer selv den SQL sætning som skal lave de ændringer
Avatar billede jakobg Nybegynder
09. maj 2004 - 21:56 #4
Har du en fortløbende ID-kolonne i den tabel, som dataene kommer fra? Prøv evt. at erstatte * med kolonnenavnene, som du skal bruge.
Avatar billede jaffafo Nybegynder
09. maj 2004 - 22:04 #5
som sagt vil den gerne hente dataen ind..  den vil bare ikke gemme det igen..

men jeg prøver...  :)
Avatar billede jaffafo Nybegynder
09. maj 2004 - 22:25 #6
Samme fejl.. :(

nu ser min SQL sådan ud:

SELECT NyhedID,Dato,Overskrift,Tekst,Forfatter FROM Nyheder
Avatar billede jakobg Nybegynder
09. maj 2004 - 22:33 #7
Så bliver vi vist nød til at se resten af koden... :)
Avatar billede jaffafo Nybegynder
09. maj 2004 - 22:47 #8
her fylder jeg datagridden:

        strconnect = "Provider=Microsoft.Jet.OLEDB.4.0;"
        strconnect += "Data Source="
        strconnect += ConfigurationSettings.AppSettings("databaseoledb") & "BLABLA.mdb"

        strSelect = "SELECT NyhedID,Dato,Overskrift,Tekst,Forfatter FROM Nyheder"
        Dim objConnect As New OleDbConnection(strconnect)
        objDataAdapter = New OleDbDataAdapter(strSelect, objConnect)
        objDataAdapter.Fill(objDataSet, "Nyheder")

        dgbeholder1.DataSource = objdataset
        dgbeholder1.DataBind()
        Cache("dataset") = objdataset
        Cache("dataadapter") = objDataAdapter


Her er resten::  sorry for længden.. :)




    Public sub edit_click(sender as object, e as datagridcommandeventargs)   
        dgbeholder1.edititemindex = e.item.itemindex
        dgbeholder1.DataSource = objdataset
        dgbeholder1.DataBind()
    end sub

    Public sub update_click(sender as object, e as datagridcommandeventargs)   
        Id = E.Item.Cells(0).Text
        objTable = objDataSet.Tables("Nyheder")
        strexpr = "NyhedID =" & id
        Dim foundRows As DataRow() = objTable.Select(strexpr)

        if foundRows.length>0 then
            Dim txtOverskrift As TextBox = CType(e.Item.Cells(2).Controls(0), TextBox)
            Dim txtTekst As TextBox = CType(e.Item.Cells(3).Controls(0), TextBox)
            Dim txtForfatter As TextBox = CType(e.Item.Cells(4).Controls(0), TextBox)
            foundrows(0) ("Overskrift") = txtOverskrift.text
            foundrows(0) ("Tekst") = txtTekst.text
            foundrows(0) ("Forfatter") = txtForfatter.text
        end if

        dgbeholder1.edititemindex = -1
        dgbeholder1.DataSource = objdataset
        dgbeholder1.DataBind()
    end sub

    Public sub delete_click(sender as object, e as datagridcommandeventargs)
        Id = E.Item.Cells(0).Text
        objTable = objDataSet.Tables("Nyheder")
        strexpr = "NyhedID =" & id
        Dim foundRows As DataRow() = objTable.Select(strexpr)

        if foundRows.length>0 then
            foundrows(0).delete
        end if

        dgbeholder1.DataSource = objdataset
        dgbeholder1.DataBind()
    end sub

    Public sub ny_click(Source As Object, E as EventArgs)
        objTable = objDataSet.Tables("Nyheder")

        Dim newRows As DataRow
        newRows = objTable.NewRow()
        newRows("NyhedID") = nyMedlemsid()
        newRows("Dato") = now()
        newRows("Overskrift") = ""
        newRows("Tekst") = ""
        newRows("Forfatter") = ""
        objTable.Rows.Add(newRows)

        dgbeholder1.EditItemIndex = objTable.Rows.Count-1
        dgbeholder1.DataSource = objdataset
        dgbeholder1.DataBind()
    end sub

    Public sub cancel_click(sender as object, e as datagridcommandeventargs)
   
        Id = E.Item.Cells(0).Text
        objTable = objDataSet.Tables("Nyheder")
        strexpr = "NyhedID =" & id
        Dim foundRows As DataRow() = objTable.Select(strexpr)

        if foundRows.length>0 then
            foundrows(0).delete
        end if
   
        dgbeholder1.edititemindex = -1
        dgbeholder1.DataSource = objdataset
        dgbeholder1.DataBind()
    end sub

    Public Sub gem_click(Source As Object, E as EventArgs)   
        objTable = objDataSet.Tables("Nyheder")       
        Dim objcommandbuilder as new oledbcommandbuilder(objDataAdapter)
        objDataAdapter.deletecommand = objcommandbuilder.getdeletecommand()
        objDataAdapter.insertcommand = objcommandbuilder.getinsertcommand()
        objDataAdapter.updatecommand = objcommandbuilder.getupdatecommand()
        objDataAdapter.update(objtable)
    End Sub

    function nyMedlemsid() as integer
        dim nummer as integer
        DataOleDB.opendb("BLABLA")
            DataOleDB.DanData("SELECT NyhedID FROM Nyheder ORDER BY NyhedID desc;")       
            If DataOleDB.Data.read() then
                nummer = DataOleDB.Data("NyhedID")
            else
                nummer = 0
            end if
        DataOleDB.closedb()       
        nummer = nummer + 1
        return nummer
    end function


Alt andet virker fint..  det er kun når jeg trykker på Gem (Public Sub gem_click)
Avatar billede jaffafo Nybegynder
09. maj 2004 - 22:49 #9
Og dette er min Datagrid:

<asp:datagrid id="DgBeholder1" Font-Size="12px" BorderColor="#000000" BorderStyle="solid" BorderWidth="1px" Font-Name="Verdana"
OnEditCommand="Edit_click" OnUpdateCommand="Update_click" OnDeleteCommand="Delete_click" OnCancelCommand="Cancel_click"
Width="100%" runat="server" ShowFooter="false" ShowHeader="True"
AllowPaging="False" CellPadding="2" GridLines="none" AllowSorting="False" AutoGenerateColumns="false">

<PagerStyle position="Bottom" HorizontalAlign="right" mode="NumericPages" />
<headerstyle BackColor="#aaaabb" />
<footerstyle BackColor="#aaaabb" />
<AlternatingItemStyle BackColor="#aaaaff"/>
<columns>
<asp:BoundColumn HeaderText="NyhedID" DataField="NyhedID" ReadOnly="true" />
<asp:BoundColumn HeaderText="Dato" DataField="Dato" ReadOnly="true" />
<asp:BoundColumn HeaderText="Overskrift" DataField="Overskrift" />
<asp:BoundColumn HeaderText="Tekst" DataField="Tekst" />           
<asp:BoundColumn HeaderText="Forfatter" DataField="Forfatter" />
<asp:EditCommandColumn EditText="Ret" CancelText="Fortryd" UpdateText="Opdater"/>
<asp:ButtonColumn ButtonType="LinkButton" Text="Slet" CommandName="Delete" />
</columns>
</asp:datagrid>
Avatar billede jakobg Nybegynder
10. maj 2004 - 09:39 #10
Koden hvori du fylder datagrid'et, hvor (og hvornår) bliver den kørt?
Avatar billede jaffafo Nybegynder
10. maj 2004 - 10:50 #11
I page_load
Avatar billede jakobg Nybegynder
10. maj 2004 - 12:13 #12
Lige umiddelbart er der ikke noget der springer i øjnene.
Du er sikker på, at du ikke har lagt IsPostBack rundt om dér hvor du fylder datagrid'et?
Hvorfra kalder du egentlig gem_click, er det en knap der ligger undenfor dit datagrid?
Prøv at Trace Select-commandoen lige før fejlen opstår.
Avatar billede jaffafo Nybegynder
10. maj 2004 - 16:15 #13
gem_click sidder udenfor ja..

Hvordan tracer jeg?
Avatar billede jakobg Nybegynder
10. maj 2004 - 16:20 #14
Avatar billede jaffafo Nybegynder
14. maj 2004 - 15:54 #15
lukker..  fandt en anden løsning
Avatar billede jakobg Nybegynder
14. maj 2004 - 16:19 #16
Lidt tarveligt at du lukkede den uden at give point...
Avatar billede jaffafo Nybegynder
14. maj 2004 - 17:40 #17
det har du ret i.. :(  det var fordi jeg har ryddet op i mine oprettede sprgsmål..

jeg smider lige en spørgsmål til dig..    smid et svar i det...
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