手动从gridview绑定中删除一行?
Posted
技术标签:
【中文标题】手动从gridview绑定中删除一行?【英文标题】:Deleting a row from gridview bound manually? 【发布时间】:2013-12-03 15:02:17 【问题描述】:我有一个绑定到允许下载文件的表的网格视图。该表包括:
tableid 为 int 文件名作为字符串 文件路径为字符串 删除(在网格视图中添加列)这种删除不是自动的,它是编码的。我希望用户单击删除,选择的行将被删除。就这么简单,但我似乎无法获得要删除的行的 ID。这就是我所做的:
Try
'Get the Image_Id from the DataKeyNames
Dim imgId As Integer = Convert.ToInt32(gvDetails.DataKeys(e.RowIndex).Value)
Dim cmd As New SqlCommand("delete from FilesTable where id=@id", con)
cmd.Parameters.AddWithValue("@id", imgId)
cmd.CommandType = CommandType.Text
con.Open()
cmd.ExecuteNonQuery()
Catch ex As Exception
ScriptManager.RegisterStartupScript(Me, Me.[GetType](), "Message", "alert('Error occured : " & ex.Message.ToString() & "');", True)
End Try
但我不断收到字符串输出无法转换为整数的错误:
发生错误:输入字符串的格式不正确。
请帮忙!
这是网格视图的绑定方式:
Private Sub BindGridviewData()
Try
con.Open()
Dim cmd As New SqlCommand("select * from FilesTable", con)
Dim da As New SqlDataAdapter(cmd)
Dim ds As New DataSet()
da.Fill(ds)
con.Close()
gvDetails.DataSource = ds
gvDetails.DataBind()
Catch ex As Exception
Response.Write(ex.Message)
End Try
End Sub
【问题讨论】:
您是否尝试过调试并查看gvDetails.DataKeys(e.RowIndex).Value
的值是多少?我希望它不是可以转换为整数的东西。你是如何绑定你的网格视图的?
Private Sub BindGridviewData() Try con.Open() Dim cmd As New SqlCommand("select * from FilesTable", con) Dim da As New SqlDataAdapter(cmd) Dim ds As New DataSet() da .Fill(ds) con.Close() gvDetails.DataSource = ds gvDetails.DataBind() Catch ex As Exception Response.Write(ex.Message) End Try End Sub
是的,我做了,值是 = 0,它不应该是
表FilesTable
有主键吗?我目前无法测试,但我怀疑 DataKeys 不会自动设置,除非绑定到它的表具有主键?您可能需要在调用Databind()
之前设置DataKeyName Property
是的,正如您在上面的代码中看到的那样,它确实调用了 id!
【参考方案1】:
找了很久才找到答案,很简单的问题:
而不是: Dim imgId As Integer = Convert.ToInt32(gvDetails.DataKeys(e.RowIndex).Value)
我改成:
Dim imgId As Integer = Int32.Parse(gvDetails.Rows(e.RowIndex).Cells(0).Text)
【讨论】:
以上是关于手动从gridview绑定中删除一行?的主要内容,如果未能解决你的问题,请参考以下文章
C# ASP.NET怎么手动给GridView赋值,不从数据库中读取?
DevExpress的gridControl怎么删除网格中的一行