scusate ma perchè allora in questo codice trovato su internet tutto va bene:
<%@ Import Namespace="System.Data" %>

<html>
<head>

<script language="VB" runat="server">

Dim Cart As DataTable
Dim CartView As DataView

Sub Page_Load(sender As Object, e As EventArgs)

Dim dr As DataRow
Dim I As Integer

If Session("DL3VB_ShoppingCart") Is Nothing Then

Cart = New DataTable()
Cart.Columns.Add(new DataColumn("Qty", GetType(String)))
Cart.Columns.Add(new DataColumn("Item", GetType(String)))
Cart.Columns.Add(new DataColumn("Price", GetType(String)))
Session("DL3VB_ShoppingCart") = Cart

'Make some rows and put some sample data in
For I = 1 To 4
dr = Cart.NewRow()
If (i Mod 2 <> 0) Then
dr(0) = "2"
Else
dr(0) = "1"
End If
dr(1) = "Item " & i.ToString
dr(2) = (1.23 * (i + 1)).ToString
Cart.Rows.Add(dr)
Next
Else
Cart = Session("DL3VB_ShoppingCart")
End If

CartView = New DataView(Cart)
CartView.Sort="Item"
If Not IsPostBack Then
' need to load this data only once
BindList
End If

End Sub

Sub BindList()
DataList1.DataSource= CartView
DataList1.DataBind
End Sub

Sub DataList_EditCommand(sender As Object, e As DataListCommandEventArgs)
DataList1.EditItemIndex = e.Item.ItemIndex
BindList
End Sub

Sub DataList_CancelCommand(sender As Object, e As DataListCommandEventArgs)
DataList1.EditItemIndex = -1
BindList
End Sub

Sub DataList_UpdateCommand(sender As Object, e As DataListCommandEventArgs)
Dim itemLabel As System.Web.UI.WebControls.Label = e.Item.FindControl("Label1")
Dim qtyText As System.Web.UI.WebControls.TextBox = e.Item.FindControl("Text1")
Dim priceText As System.Web.UI.WebControls.TextBox = e.Item.FindControl("Text2")

Dim item As String = itemLabel.Text
Dim qty As String = qtyText.Text
Dim price As String = priceText.Text

' with a database, we'd use an update command. Since we're using an in-memory
' DataTable, we'll delete the old row and replace it with a new one
'remove old entry
CartView.RowFilter = "Item='" & item & "'"
If CartView.Count > 0 Then
CartView.Delete(0)
End If
CartView.RowFilter = ""

'add new entry
Dim dr As DataRow = Cart.NewRow()
dr(0) = qty
dr(1) = item
dr(2) = price
Cart.Rows.Add(dr)

DataList1.EditItemIndex = -1
BindList
End Sub

</script>

</head>
<body>

<h3><font face="Verdana">Editing DataList Items</font></h3>


</p>

<form runat=server>
<font face="Verdana" size="-1">

<aspataList id="DataList1" runat="server"
BorderColor="black"
BorderWidth="1"
GridLines="Both"
CellPadding="3"
CellSpacing="0"
Font-Names="Verdana"
Font-Size="8pt"
Width="150px"
HeaderStyle-BackColor="#aaaadd"
AlternatingItemStyle-BackColor="Gainsboro"
EditItemStyle-BackColor="lightgreen"
OnEditCommand="DataList_EditCommand"
OnUpdateCommand="DataList_UpdateCommand"
OnCancelCommand="DataList_CancelCommand"
>
<HeaderTemplate>
Items
</HeaderTemplate>
<ItemTemplate>
<asp:LinkButton id="button1" runat="server" Text="Edit" CommandName="edit" />
<%# DataBinder.Eval(Container.DataItem, "Item") %>
</ItemTemplate>
<EditItemTemplate>
Item:
<asp:Label id="Label1" runat="server"
Text='<%# DataBinder.Eval(Container.DataItem, "Item") %>' />


Quantity:
<asp:TextBox id="Text1" runat="server"
Text='<%# DataBinder.Eval(Container.DataItem, "Qty") %>' />


Price:
<asp:TextBox id="Text2" runat="server"
Text='<%# DataBinder.Eval(Container.DataItem, "Price") %>' />


<asp:LinkButton id="button2" runat="server" Text="Update"
CommandName="update" />
<asp:LinkButton id="button3" runat="server" Text="Cancel"
CommandName="cancel" />
</EditItemTemplate>

</aspataList>

</font>
</form>

</body>
</html>


l'unica differenza rispetto al mio è che io il mio datalist viene popolato da un database.