如何从VB.NET中的Session中删除gridview中的选定行?

时间:2011-07-09 23:30:32

标签: .net asp.net vb.net

大家好我正在尝试创建一个网页,其中包含1页上的项目列表,该网页显示在启用了自动生成选定按钮的网格视图中,他们可以单击此按钮并将项目加载到集合中我已存储在会话中。在另一页上,包含所选项目的会话将显示在gridview中。

现在我希望他们能够点击自动生成的删除按钮,这样它就会删除他们想要从gridview中删除的项目?这是我遇到麻烦的地方,需要一些人来帮助我。

我的索引页面中有一个功能(显示可用产品的页面)这是它的代码

 Public Function addToCollection() As Collection
    If Session("Order") Is Nothing Then
        colOrder = New Collection
        Session("Order") = colOrder
    Else
        colOrder = Session("Order")
    End If
    Return colOrder
End Function

然后我在页面中加载我的代码来制作如下的集合:

         addToCollection()
    Dim gvRow As GridViewRow = gvCDs.SelectedRow
    Dim objOrder As Order = New Order
    objOrder.ID = gvRow.Cells(1).Text
    objOrder.Title = gvRow.Cells(2).Text
    objOrder.Artist = gvRow.Cells(3).Text
    objOrder.Price = gvRow.Cells(5).Text
    colOrder.Add(objOrder)

    Session("Order") = colOrder

然后在我的其他页面中,我在gridview中显示会话,如下所示:

     Protected Sub Page_LoadComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LoadComplete

    gvOrder.DataSource = Session("Order")
    gvOrder.DataBind()

End Sub

gridview在每行旁边都有自动生成的删除按钮,我想要它,这样当单击按钮时,它会从gridview中删除该项目。我不知道如何去做但我知道我需要在gvOrder_DeletedRow子中有它,我需要从会话中删除项目然后重新加载页面,请帮我解决这个我不知道要写什么代码

2 个答案:

答案 0 :(得分:1)

您需要处理GridView.OnRowDeleting方法。在代码隐藏中创建一个方法:

Sub GridView1_RowDeleting(sender As Object, e As GridViewDeleteEventArgs)

    ' Handle the removal of the row here
    ' The index of the row will be in e.RowIndex property

End Sub

在ASPX页面上,您需要将onRowDeleting =“GridView1_RowDeleting”添加到GridView控件的标记中。

如何删除行取决于您使用的DataSource(例如,如果您将数据库作为数据源,是否也要更新数据库)。发布一些代码将有助于获得更好,更详细的答案 - 但这应该让你指向正确的方向。

已编辑添加 你发布了一些代码,但随后删除了它,所以我在下面发布它以继续我的回答:

Protected Sub Page_LoadComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LoadComplete

    gvOrder.DataSource = Session("Order") 
    gvOrder.DataBind() 

End Sub


Protected Sub gvOrder_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles gvOrder.RowDeleting 

    Session.RemoveAt(gvOrder.SelectedRow.RowIndex) 
End Sub

你的gvOrder_RowDeleting方法中的代码并不是你想要的;取决于你在Session对象中有多少东西,你要么删除那个索引上的东西,要么得到超出范围异常的索引,我认为。

试试这个:

Protected Sub gvOrder_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles gvOrder.RowDeleting 

   ' Session stores everything as an object, so its best to cast the object to the type it really is
    colOrder = CType(Session("Order"), colOrder)
    colOrder.RemoveAt(e.RowIndex)
    Session("Order") = colOrder
    gvOrder.DataSource = colOrder
    gvOrder.DataBind()

End Sub

基本上,将对象从Session中取出,删除所选行,将对象放回Session中,然后将其绑定到GridView。

答案 1 :(得分:0)

每当点击“删除”按钮时,GridView的RowCommand事件就会触发,您可以通过命令名进行检查,例如.. e.CommandName == "Delete"

protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
    if (e.CommandName == "Delete")
    {
        Int32 Id = Convert.ToInt32(e.CommandArgument);// this will return the selected 
        //row Id, which help you to identify and helps you to delete particular row
        // Put your deletion code here, that delete the record from list.....     
    }
}