gridview与4个文本框在一行中的VB.Net

gridview with 4 textboxes in a row in VB.Net

本文关键字:一行 Net VB 4个 文本 gridview      更新时间:2023-09-26

我有一个gridview与4个文本框在一行。用户在第一行的第一个文本框中输入文本。其他文本框是只读的,其值根据第一个文本框的值自动填充。当我按"enter"或"tab"键时,文本框的焦点应该转到第二行的第一个文本框。我怎样才能做到这一点?标签索引似乎不工作。我用VB来做。净

您可以使用RoWDataBound event:-

更新:

声明一个页面级别变量来保存TabIndex:-

Dim index As Short = 0

RowDataBoundEvent: -

Protected Sub grdCustomer_RowDataBound(sender As Object, e As GridViewRowEventArgs)
    If e.Row.RowType = DataControlRowType.DataRow Then
        index += 1
        Dim txtID As TextBox = DirectCast(e.Row.FindControl("txtID"), TextBox)
        txtID.TabIndex = index
        //Other TextBox(s)
        Dim txtName As TextBox = DirectCast(e.Row.FindControl("txtName"), TextBox)
        Dim txtCity As TextBox = DirectCast(e.Row.FindControl("txtCity "), TextBox)
       txtName.TabIndex = txtCity.TabIndex = -1 //Set TabIndex of Readonly textbox to -1
    End If
End Sub

这里txtID将是你的第一个文本框在每一行的文本框id,并设置其他文本框TabIndex为-1,使他们永远不会被聚焦。

文本框更改事件:-

Protected Sub txtID_TextChanged(sender As Object, e As EventArgs)
   Dim txtID As TextBox = CType(sender, TextBox)
   //Logic to populate other textbox.
   Dim focusIndex As Short = CShort(txtID.TabIndex + 1)
   Dim tabbedRow = grdCustomer.Rows.OfType(Of GridViewRow) _
                              .FirstOrDefault(Function(x) (CType(x.FindControl("txtID"), TextBox)).TabIndex = focusIndex)
   If tabbedRow IsNot Nothing Then
        tabbedRow.FindControl("txtID").Focus()
   End If
End Sub

逻辑:

由于我们按顺序设置了每一行第一个文本框的TabIndex,在textChanged事件中,我找到TabIndex等于当前文本框TabIndex + 1的文本框,并将焦点设置在该文本框上。