Halloj! Du skall inte ha värden som är komma separerade. Komplicerar bara det för dig. Det stora kruxet här är att det är en gammal databas och jag har inte så mycket val mer än att hålla mig till den nuvarande strukturen. Jag har försökt, men nepp, det gås inte med på.Hålla en DataTable vid liv och kunna lägga till o radera i den.
Jag har ett fält i en databas som är semikolonseparerat (värde1;värde2;värde3; o s v).
Dessa värden har jag lagt splittat och med en array lagt in varje värde på en enskild rad
i en DataTable och sen knutit den till en GridView via koden:
<code>
DataTabell = New System.Data.DataTable("Lista")
DataTabell.Columns.Add("ID", GetType(Integer))
DataTabell.Columns("ID").AutoIncrement = True
DataTabell.Columns("ID").AutoIncrementSeed = 1
DataTabell.Columns.Add("ListText", GetType(String))
If Len(rs("PunktLista").ToString) > 0 Then
Dim PunktArray As Array
PunktArray = Split(rs("PunktLista").ToString, ";")
Dim i As Integer
For i = LBound(PunktArray) To UBound(PunktArray)
DataRad = DataTabell.NewRow
DataRad("ListText") = PunktArray(i)
DataTabell.Rows.Add(DataRad)
Next
dgPlista.DataSource = DataTabell
dgPlista.DataBind()
End If
Session("DTabell") = DataTabell
</code>
Jag har lagt en liten textbox med en "lägg till" knapp på som kör följande kod:
<code>
DataTabell = Session("DTabell)
DataRad = DataTabell.NewRow
DataRad("ListText") = tbPlista.Text
DataTabell.Rows.Add(DataRad)
Session("DTabell") = DataTabell
Me.dgPlista.DataSource = DataTabell
Me.dgPlista.DataBind()
tbListText.Text = ""
</code>
Vilket verkar funka som det ska.
När användaren sedan så trycker på "spara ändringar" så blir det följande:
<code>
Dim Plista As String
Plista = ""
DataTabell = Session("DTabell")
For Each DataRad In DataTabell.Rows
Plista = Plista & DataRad("ListText") & ";"
Next
</code>
Nu till kruxet!
I GridView:n har jag också lagt en Deletebutton enligt följande:
<code>
<asp:GridView
ID="dgPlista"
runat="server"
BackColor="LightGoldenrodYellow"
BorderColor="Tan"
BorderWidth="1px"
CellPadding="2"
CssClass="normText"
ForeColor="Black"
GridLines="None"
Width="240px"
DataKeyNames="ID"
AutoGenerateColumns="False"
OnRowDeleting="DelListP"
>
<Columns>
<asp:CommandField
HeaderText="Radera"
DeleteText="Radera"
ShowDeleteButton="True" />
<asp:BoundField
DataField="ID"
HeaderText="Rad" />
<asp:BoundField
DataField="ListText"
HeaderText="Punkttext" />
</Columns>
<FooterStyle BackColor="Tan" />
<PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
<HeaderStyle BackColor="Tan" Font-Bold="True" />
<AlternatingRowStyle BackColor="PaleGoldenrod" />
</asp:GridView>
</code>
och i code behind så har jag lagt följande om användaren triggar OnRowDeleting:
<code>
Protected Sub DelListP(ByVal sender As Object, ByVal e As GridViewDeleteEventArgs) Handles dgPlista.RowDeleting
Dim row = e.RowIndex
DataTabell = Session("DTabell")
DataTabell.Rows.RemoveAt(row)
Me.dgPlista.DataSource = DataTabell
Me.dgPlista.DataBind()
End Sub
</code>
Men här får jag bara felmeddelandet:
<b>Object reference not set to an instance of an object.</b>
på raden
<code>
DataTabell.Rows.RemoveAt(row)
</code>
Jag förstår inte. Jag har försökt lära mig detta men just med att radera rader i DataTabeller och liknande så är jag helt lost.
Någon som kan hjälpa mig?
//JohannesSv: Hålla en DataTable vid liv och kunna lägga till o radera i den.
Lägg istället till en tabell för värdena.Sv:Hålla en DataTable vid liv och kunna lägga till o radera i den.
//Johannes