Gå til innhold

Datagrid - editere en rad


Anbefalte innlegg

Hei

 

Jeg prøver meg igjen jeg...

 

HTML kode

<asp:datagrid id="dgConstants" style="Z-INDEX: 103; LEFT: 40px; POSITION: absolute; TOP: 224px"

    runat="server" Width="840px" Height="280px" OnCancelCommand="dgConstants_Cancel" OnUpdateCommand="dgConstants_Update" OnEditCommand="dgConstants_Edit">

    <Columns>

    <asp:EditCommandColumn ButtonType="PushButton" UpdateText="Update" CancelText="Cancel" EditText="Edit"></asp:EditCommandColumn>

    <asp:BoundColumn DataField="ID" ReadOnly="True" HeaderText="ID"></asp:BoundColumn>

    </Columns>

  </asp:datagrid>

 

 

Binder data til datagriden slik:

 

    dgConstants.AutoGenerateColumns = False

 

                '    Response.Write(TabConstants.Rows.Count)

                i = TabConstants.Rows.Count

 

                Dim bc As BoundColumn

 

                For Each col As DataColumn In TabConstants.Columns

                    bc = New BoundColumn

                    bc.HeaderText = col.ColumnName

                    bc.DataField = col.ColumnName

                    Me.dgConstants.Columns.Add(bc)

                Next

                Me.dgConstants.Visible = True

 

                Dim ds As New DataSet

                ds = New DataSet

                'creating a dataset

 

                ds.Tables.Add(TabConstants)

                'adding the table to dataset

                dgConstants.DataSource = ds

                'binding the table to datagrid

                dgConstants.DataBind()

                dgConstants.Columns(1).Visible = False

                dgConstants.Columns(2).Visible = False

                dgConstants.Columns(4).Visible = False

 

Jeg ønsker å editere rader så derfor benytter jeg meg av EditCommandColumn med noen funksjoner som vist under:

 

 

Sub dgConstants_Edit(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)

        dgConstants.EditItemIndex = e.Item.ItemIndex

 

        Dim columnValue As Integer

            testBind()

 

End Sub

 

Sub dgConstants_Cancel(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)

        dgConstants.EditItemIndex = -1

    testBind()

End Sub

 

Sub dgConstants_Update(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)

 

        Dim i As Integer

        Dim columnValue As String

 

        'HENTER UT GALT ANTALL CELLER

        columnValue = e.Item.Cells.Count

 

        'HENTER UT RETT KOLONNE

        Dim itemIndx As Integer = e.Item.ItemIndex

 

        'KLARER IKKE HENTE UT VERDIER FRA CELLENE...

        Dim itemtext1 As String = dgConstants.Items(itemIndx).Cells(1).Text

        Dim itemtext2 As String = dgConstants.Items(itemIndx).Cells(2).Text

    End Sub

 

 

Kan noen fortelle meg hvorfor jeg ikke får tak i cellene i valgt rad?

 

Silje

Lenke til kommentar
Videoannonse
Annonse

Sjekk om de kolonnene den ikke klarer å hente ut, er de som du har satt til visible=false.

I så fall må du gjøre en egen bind for datagrid_EditItem, der du ikke skjuler disse feltene før en update. Kolonner og innholdet som er satt til visible=false "eksisterer" ikke for datagrid'en, dessverre.

 

Tips: Legg informasjonen i de usynlige kolonnene i enten labels eller tekstbokser som du setter til 1 px bredde. Da kan du hente ut dataene, uten at de egentlig synes. Dessverre så vil du da få rare striper i datagriden din. FOr å gjøre om på de, så lager du 3 ekstra css-oppføringer. En viser kun høyre cellekant, en viser ingen cellesidekanter, og en viser kun venstre sidekant. I onItemDataBound gjør du en sjekk på om du er i editeringsmodus, og setter css-atributtet til respektive kolonner.

 

Mulig det finnes en mindre knotete måte å gjøre det på, men denne brute-force-metoden skal faktisk fungere.

 

Kirikiri

Lenke til kommentar
Sjekk om de kolonnene den ikke klarer å hente ut, er de som du har satt til visible=false.

I så fall må du gjøre en egen bind for datagrid_EditItem, der du ikke skjuler disse feltene før en update. Kolonner og innholdet som er satt til visible=false "eksisterer" ikke for datagrid'en, dessverre.

 

Tips: Legg informasjonen i de usynlige kolonnene i enten labels eller tekstbokser som du setter til 1 px bredde. Da kan du hente ut dataene, uten at de egentlig synes. Dessverre så vil du da få rare striper i datagriden din. FOr å gjøre om på de, så lager du 3 ekstra css-oppføringer. En viser kun høyre cellekant, en viser ingen cellesidekanter, og en viser kun venstre sidekant. I onItemDataBound gjør du en sjekk på om du er i editeringsmodus, og setter css-atributtet til respektive kolonner.

 

Mulig det finnes en mindre knotete måte å gjøre det på, men denne brute-force-metoden skal faktisk fungere.

 

Kirikiri

Hei

 

Det har ikke noe med de kolonnene jeg setter til visable = false. Det er faktisk kun disse jeg får tak i update funksjonen pga disse er definert i HTML koden. Problemet er at jeg ikke får tak i de kolonner som jeg oppretter dynamisk i koden.

Lenke til kommentar

Det er mulig du må gjøre en sjekk på

if page.IsPostback then

'- ikke gjør noe

else

BindDatagrid

end if

 

Eller om det er omvendt. Mest sannsynlig så prøver du å oppdatere fra en grid som ikke er i edit-modus, eller noe sånn.

 

Sjekk disse to postene fra www.asp.net om de kan hjelpe deg videre:

http://www.asp.net/Forums/ShowPost.aspx?ta...=1&PostID=57849

og http://www.asp.net/Forums/ShowPost.aspx?ta...=1&PostID=97265

 

Kirikiri

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...