大家好我正在尝试创建一个网页,其中包含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子中有它,我需要从会话中删除项目然后重新加载页面,请帮我解决这个我不知道要写什么代码
答案 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.....
}
}