09. maj 2004 - 14:09Der 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()
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...
strSelect = "SELECT NyhedID,Dato,Overskrift,Tekst,Forfatter FROM Nyheder" Dim objConnect As New OleDbConnection(strconnect) objDataAdapter = New OleDbDataAdapter(strSelect, objConnect) objDataAdapter.Fill(objDataSet, "Nyheder")
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")
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)
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.
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...
Synes godt om
Ny brugerNybegynder
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.