【问题标题】:How to make whole row of DataGrid(not GridView) clickable如何使整行 DataGrid(不是 GridView)可点击
【发布时间】:2015-12-03 18:38:40
【问题描述】:

我正在寻找一种如何在 DataGrid 中选择整行的方法,但我只看到了一个 GridViewcode。下面是示例代码:

Private Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowCreated
  If e.Row.RowType = DataControlRowType.DataRow Then
    e.Row.Attributes("onmouseover") = "this.style.cursor='pointer';this.style.textDecoration='underline';"
    e.Row.Attributes("onmouseout") = "this.style.textDecoration='none';"
    e.Row.ToolTip = "Click to select row"
    e.Row.Attributes("onclick") = Me.Page.ClientScript.GetPostBackClientHyperlink(Me.GridView1, "Select$" & e.Row.RowIndex)
  End If
End Sub

为了让它在我的 DataGrid 上工作,我对我的代码进行了一些更改,并使其如下所示:

Private Sub DataGrid_ItemCreated(sender As Object, e As DataGridItemEventArgs) Handles DataGrid.ItemCreated
    If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
        e.Item.Attributes("onmouseover") = "this.style.cursor='pointer';this.style.textDecoration='underline';"
        e.Item.Attributes("onmouseout") = "this.style.textDecoration='none';"
        e.Item.ToolTip = "Click to select row"
        e.Item.Attributes("onclick") = Me.Page.ClientScript.GetPostBackClientHyperlink(Me.DataGrid, "Select$" & e.Item.ItemIndex)
    End If
End Sub

但它似乎没有触发,(我认为onclickpart 存在问题)但它正在突出显示。我想做的是在javascript中的onclick上放置一个CommandName = Select,但是如何?

编辑:这在我的新代码中。

Private Sub DataGrid_ItemCreated(sender As Object, e As DataGridItemEventArgs) Handles DataGrid.ItemCreated

    If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
        e.Item.Attributes("onmouseover") = "this.style.cursor='pointer';this.style.textDecoration='underline';"
        e.Item.Attributes("onmouseout") = "this.style.textDecoration='none';"
        e.Item.ToolTip = "Click to select row"
        Dim button As LinkButton
        button = DirectCast(e.Item.Cells(0).Controls(0), LinkButton)
        Dim js As String = Page.ClientScript.GetPostBackClientHyperlink(button, "")
        e.Item.Attributes("onclick") = js
    End If
End Sub

但唯一改变的是(根据我观察到的)它只是回发。

【问题讨论】:

  • 你为什么不首先使用GridViewDataGrid 非常陈旧且多余。与GridView 相比没有任何优势。
  • @TimSchmelter 因为我在这个 DataGrid 中已经有很多代码。所以我需要一直使用它。如果我将网格更改为 GridView,我会有很多修改:(
  • 您建议的链接使用按钮的静态值。但我的 datagrid 的值各不相同。
  • 什么是静态值?如果我没看错,他只是假设第一列中的链接按钮。他使用AutoGenerateColumns=falseBoundFields,但数据源是动态的。

标签: asp.net vb.net gridview datagrid


【解决方案1】:

确保您处理了DataGrid.ItemCommand 事件:

Private Sub DataGrid_ItemCommand(source As Object, e As DataGridCommandEventArgs) Handles DataGrid.ItemCommand
    Me.DataGrid.SelectedIndex = e.Item.ItemIndex
End Sub

使用DataGrid.ItemDataBound 代替DataGrid.ItemCreated

    Private Sub DataGrid_ItemDataBound(sender As Object, e As DataGridItemEventArgs) Handles DataGrid.ItemDataBound
    If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
        e.Item.Attributes("onmouseover") = "this.style.cursor='pointer';this.style.textDecoration='underline';"
        e.Item.Attributes("onmouseout") = "this.style.textDecoration='none';"
        e.Item.ToolTip = "Click to select row"
        'e.Item.Attributes("onclick") = Me.Page.ClientScript.GetPostBackClientHyperlink(Me.DataGrid, "Select$" & e.Item.ItemIndex)

        Dim button As LinkButton
        button = DirectCast(e.Item.Cells(0).Controls(0), LinkButton)
        'Dim js As String = Page.ClientScript.GetPostBackClientHyperlink(Me.DataGrid, "Select$" & e.Item.ItemIndex)
        Dim js As String = Page.ClientScript.GetPostBackClientHyperlink(button, "")

        e.Item.Attributes("onclick") = js
    End If
End Sub

然后我在 DataGrid 的标记中添加了以下内容,只是为了突出显示选择:

<SelectedItemStyle BackColor="Red" />

【讨论】:

  • 您提供的代码只有在我按下“选择”按钮时才有效。但我要做的是整行应该是可点击的,而不仅仅是选择按钮,因为我也会隐藏那个。
  • 好吧,没有意识到你需要整行都是可点击的。我会编辑答案
  • 刚刚编辑,希望对您有所帮助
  • @Dale,你能发布你的代码吗?我在 Chrome、FF、Opera、IE 和 Edge 中有这个工作
  • 你指的是整行可点击吗?不只是select 按钮?
猜你喜欢
  • 2022-08-12
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 2018-01-01
  • 1970-01-01
相关资源
最近更新 更多