Avatar billede neoman Novice
10. juni 2006 - 18:34 Der er 4 kommentarer og
1 løsning

Problemer med at editere DataTable med GridView

Jeg har brug for at tilbyde en tabel med vilkårligt antal records i til editering. Der kan altså tænkes at være 0 records ti at starte med. Planen er at bruge en GridView, og for at gøre livet simpelt for mig selv, havde jeg tænkt mig at bruge en DataTable, som der i hht. brugerens response tilføjes rækker til. Tanken er så først når brugeren er færdig, at gemme tabellen i DB.

Jeg er nybegynder og har famlet mig frem til at man sådan set selv skal lave alle de nødvendige handlinger (er det rigtigt? At jeg selv skal sætte EditIndex, samt udskifte værdier i den DataTable - kan gridview ikke dét når tabellen ikke er linket med en dataadaptor?)

Jeg har fået det til at virke - men har svært ved at forstå hvorfor jeg skal trykke på EDIT knappen TO gange inden den editerede række switcher til edit.

Koden er her (jeg bruger template columns frodi der skal en DropDownList ind når jeg har fået dette her til at virke):

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim tbl As DataTable
        Dim col1, col2, col3 As DataColumn
        Dim workRow As DataRow
        utilsuser.dwrite("from load" & vbCrLf)
        tbl = New DataTable("mytable")
        If Not Page.IsPostBack Then
            col1 = New DataColumn("mycolname1", Type.GetType("System.Int32"))
            col2 = New DataColumn("mycolname2", Type.GetType("System.String"))
            col3 = New DataColumn("mycolname3", Type.GetType("System.Boolean"))
            tbl.Columns.Add(col1)
            tbl.Columns.Add(col2)
            tbl.Constraints.Add(New UniqueConstraint(col2))
            tbl.Columns.Add(col3)
            Dim i As Integer

            For i = 0 To 9
                workRow = tbl.NewRow()
                workRow(0) = i
                workRow(1) = "CustName" & i.ToString()
                workRow(2) = True
                tbl.Rows.Add(workRow)
            Next
            tbl.AcceptChanges()
            GridView2.DataSource = tbl
            GridView2.DataBind()
            Session("mytabl") = tbl
            Session("mytest") = "min test sætning"
        End If
    End Sub


    Protected Sub GridView2_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles GridView2.RowDeleting
        Dim tbl As New DataTable
        tbl = Session("mytabl")
        Dim itemcolumns As DataRowCollection = tbl.Rows
        itemcolumns(e.RowIndex).Delete()
        tbl.AcceptChanges()
        GridView2.DataSource = tbl
        GridView2.DataBind()
        Session("mytabl") = tbl

    End Sub
    Protected Sub GridView2_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GridView2.RowEditing
        Dim tbl As New DataTable
        GridView2.EditIndex = e.NewEditIndex
    End Sub
    Protected Sub GridView2_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles GridView2.RowUpdating
        Dim tbl As New DataTable
        tbl = Session("mytabl")
        Dim itemcolumns As DataRowCollection = tbl.Rows
        Dim tablerow As DataRow
        tablerow = itemcolumns(e.RowIndex)
        MsgBox(CType(GridView2.Rows(e.RowIndex).Cells(2).FindControl("TextBox2"), TextBox).Text() & "tablerow")
        tablerow.BeginEdit()
        tablerow(1) = CType(GridView2.Rows(e.RowIndex).Cells(2).FindControl("TextBox2"), TextBox).Text()
        tablerow.EndEdit()
        tbl.AcceptChanges()
        GridView2.EditIndex = -1
        GridView2.DataSource = tbl
        GridView2.DataBind()
        Session("mytabl") = tbl

    End Sub

Alle ideer/kommentarer er velkomne.
Avatar billede snepnet Nybegynder
11. juni 2006 - 01:57 #1
Hvis du benytter Visual Web Developer eller Visual Studio 2005, kan du via server explorer åbne din database, og blot trække tabellen ind på din form. Så kan du sortere, page og editere uden kode.
Mvh
Avatar billede neoman Novice
11. juni 2006 - 10:37 #2
Ok - mysteriet med TO klik løst - der skulle en DataBind til i eventet RowEditing  som nu ser sådan ud:
  Protected Sub GridView2_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles GridView2.RowEditing
        Dim tbl As New DataTable
        tbl = Session("mytabl")
        GridView2.EditIndex = e.NewEditIndex
        GridView2.DataSource = tbl
        GridView2.DataBind()
    End Sub

Prøvede lige snepnets forslag af - det så ikke videre kønt ud hos mig:-)

Min GridView er ikke bundet til en DB-tabel, fordi GV ikke kan tilføje nye records. Hvis tabellen er tom, så skulle jeg vel selv lave en ny record, og tvinge brugeren til at udfylde den, eller slette den record hvis brugeren canceler. Og jo, kunne vel også bruge en detailsview, som jo kan tilføje, men jeg ønsker at have en meget simpel side uden 25 knapper. Det er derfor jeg bakser med  et eller andet in-memory only (og såmænd også for "the learning experience").
Avatar billede snepnet Nybegynder
11. juni 2006 - 12:37 #3
Du kan godt benytte et gridview sammen med et datalag - så bruger du blot en objectdatasource istedet.
Du kan hente den solution der ligger her:
http://www.microsoft.com/downloads/details.aspx?FamilyID=3f0aa1ee-8041-4ec1-9141-3f83d0bcbd62&displaylang=da
Og kigge på den form der hedder PersonsGridView.aspx.
Mht. til det med at kunne indsætte rækker vha. et gridview, er det her en typisk måde at gøre det på:
http://fredrik.nsquared2.com/viewpost.aspx?PostID=155
Mvh
Avatar billede neoman Novice
30. august 2010 - 18:32 #4
HVis du stadig er der - læg et svar. Beklager ventetiden
Avatar billede neoman Novice
07. september 2010 - 15:02 #5
Lukket - nu har jeg lavet et nyt, så snepnet kan få kvittering for indsatsen.
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