データソースとして List (Of MyObject) を持つ gridview があります。
gv.DataSource = MyListObject
gv.Databind()
templatefield の下に、MyListObject からレコードを削除してから再バインドするように構成されたボタンがあります。レコードを追加するには、以下のコードがあります
Protected Sub btnAddRecord_Click(sender As Object, e As EventArgs) Handles btnAddRecord.Click
Dim Customer As New Customer
With Customer
.Name = txtName.Text
.Surname = txtSurname.Text
.....
.ID += MyListObject.Count
End With
MyListObject.Add(Customer)
gv.DataSource = MyListObject
gv.DataBind()
End Sub
これは正常に機能しますが、必要に応じてユーザーがレコードを削除できるようにする必要があります。
Private Sub gv_RowCommand(sender As Object, e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles gv.RowCommand
If e.CommandName = "Delete" Then
MyListObject.RemoveAt(e.CommandArgument)
gv.DataSource = Nothing
gv.DataBind()
gv.DataSource = MyObjectList
gv.DataBind()
upnl.UpdateMode = UpdatePanelUpdateMode.Conditional
upnl.Update()
End If
End Sub
ボタンをクリックすると、レコードは削除されますが、データは更新されません。つまり、レコードが追加されると、ID を行 ID として割り当て、その ID を使用してレコードを削除します。List と Gridview の値が同期していないため、値をリセットして ID を正しいものにするために、データソースを何も設定せずに再バインドしますが、これは期待どおりに機能しません。
誰が間違っているのか、この問題を修正する方法を教えてもらえますか?