2013-04-08 82 views
0

我有一个GridView,它有一个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将是正确的 - 但这不符合我的预期。

任何人都可以告诉我哪里会出错,以及如何纠正这个问题?

+0

在你的gv_RowCommand函数中,这一行: gv.DataSource = _DirectorAddList 实际上是指MyListObject我猜? gv.DataSource = MyListObject – Cortright 2013-04-08 18:33:15

+0

是的,这是一个错字。 – Computer 2013-04-08 18:55:43

+0

删除更新面板并执行正常页面刷新,以查看是否获得了期望的结果。这样你可以找出正确的原因。 – 2013-04-08 19:00:09

回答

1

我加了CommandArgument ='<%#Container.DataItemIndex%>'它解决了问题,因为我当时删除了用户点击的行。

1

gridviewupdatepanel?如果是,该面板也应该刷新。

+1

另外是的,他说的是对的。如果你能够在调试模式下运行,并在更新的数据源上的数据绑定后询问gridview对象,如果你的gridview看起来像你期望的那样,很可能你需要更新它所在的UpdatePanel。 – Cortright 2013-04-08 18:45:36

+0

我更新了上面的代码以显示它现在的样子。将更新面板代码添加到RowCommand事件后,没有区别。我会仔细检查调试模式下的值,除非有人能看到明显的错误? – Computer 2013-04-08 18:57:19

0

就像一个侧面说明,我可能会处理在客户端使用ajax脚本管理器更新的内容,而不是在后面的代码中进行更新。节省头痛。以上可能会更新正确的更新面板,但ajax管道可能不在客户端。