【发布时间】:2013-07-18 23:41:52
【问题描述】:
我正在使用以编程方式填充的 GridView。为了访问 ID 值,我必须将其作为列之一(与 ListBox 不同,在 ListBox 中,我能够以隐藏的方式将值分配给每个条目)。有没有办法隐藏该 ID 列,但仍使用该值?
这些列是通过代码自动生成的,我正在使用 DataKeys 访问 ID 值。
【问题讨论】:
我正在使用以编程方式填充的 GridView。为了访问 ID 值,我必须将其作为列之一(与 ListBox 不同,在 ListBox 中,我能够以隐藏的方式将值分配给每个条目)。有没有办法隐藏该 ID 列,但仍使用该值?
这些列是通过代码自动生成的,我正在使用 DataKeys 访问 ID 值。
【问题讨论】:
以下是您可以执行的操作的一般概述。这并不复杂。您像往常一样进行数据绑定,但这样做时您会找到 ID 列的索引。然后使用该索引隐藏 RowCreated 事件上的列。如果您搜索如何使用自动生成的列隐藏列,您将按照我用于隐藏的方法遇到几个答案。
Private IDColumnIndex As Integer //Class scope - we need to use it in multiple methods
Public Sub PageLoad() Handles Me.Load //or wherever your databind is happening
Dim source As New DataTable()
IDColumnIndex = source.Columns("id").Ordinal //Gets column index of "ID" column
view.DataSource = source
view.DataBind()
End Sub
//Hide our "ID" auto-generated column.
Public Sub view_RowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles view.RowCreated
e.Row.Cells(IDColumnIndex).Visible = False
End Sub
【讨论】:
将 ID 分配给 DataKeyNames 集合可以正常工作,这对您来说是个问题吗?数据键可用于每一行,不会显示在 UI 中,但仍可通过行数据访问,因此您可以获得每行的 ID。您只需从 DataKeys 集合中获取它,而不是直接从行中获取。
您可以添加代码来隐藏第一列(ID)以使其不出现,并依靠使用 datakeynames 来获取 ID 值...如果这不起作用,您能否详细说明原因所以我可以调整我的答案..
【讨论】:
PanelGridView.SelectedDataKey["id"] 访问该ID,那么我现在如何隐藏该列?我应该补充一点,我添加到 DataKeys 中的只是 DataKeyNames,它似乎是从自动生成的列中获得的……有没有办法把它放在 DataKeys 中,而不仅仅是指定要从自动生成的列?
Columns.Remove(0)删除该列
如果您将 ID 列添加到 GridView 的 DataKeyNames 属性,您可以获得 ID 值。 msdn link here
myGrid.DataKeys[myRow.RowIndex].Value.ToString();
【讨论】:
PanelGridView.SelectedDataKey["id"] 访问刚才的 ID。
我通常会添加一个可见的列但是然后将列的模板设置为一个空格或其他东西。然后在列的 ID 中,输入我要跟踪的 ID。当内容被呈现为 HTML 时,这种技术让我可以使用 javascript 轻松找到行的 ID。
如果您让网格视图使用隐藏的数据键进行业务渲染,您可能永远无法在客户端浏览器的 JavaScript 中找到 ID。
【讨论】: