Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在DataGridView上设置下一个CurrentCell_C#_Vb.net_Winforms_Datagridview - Fatal编程技术网

C# 在DataGridView上设置下一个CurrentCell

C# 在DataGridView上设置下一个CurrentCell,c#,vb.net,winforms,datagridview,C#,Vb.net,Winforms,Datagridview,我有一个三列DataGridView,我希望最后一列中的用户输入选项卡转到下一行,但转到第1列,而不是第0列。以下代码获取一个错误System.StackOverflowException 我看到关于如何从按钮更改CurrentCell的代码,但是事件ChangeCurrentCell,CellLeave似乎允许更改当前单元格 Private Sub dgvEngine_CellLeave(sender As Object, e As DataGridViewCellEventArgs) Han

我有一个三列DataGridView,我希望最后一列中的用户输入选项卡转到下一行,但转到第1列,而不是第0列。以下代码获取一个错误System.StackOverflowException

我看到关于如何从按钮更改CurrentCell的代码,但是事件ChangeCurrentCell,CellLeave似乎允许更改当前单元格

Private Sub dgvEngine_CellLeave(sender As Object, e As DataGridViewCellEventArgs) Handles dgvEngine.CellLeave
    If mbLoadEng = True Then Exit Sub
    If e.ColumnIndex = 2 Then
        dgvEngine.CurrentCell = dgvEngine(1, e.RowIndex + 1)
    End If
End Sub
如何从DataGridView事件更改当前单元格

我并不局限于这种方法——我只是尝试在用户在单元格中单击时跳过第0列

找到更好的方法来处理我的具体案例-使用Row HeaderCell

        dgvEngine.Rows(iRow).HeaderCell.Value = col.ColumnName.Substring(1)
后来


col.ColumnName来自数据行。我所做的基本上是一个用DataRow列名作为行标题的转置网格。

发现HeaderCell是更好的方法。结果是一个未绑定的网格,两组引擎数据新旧并排,行标题设置为fieldname

    mbLoadEng = True
    Dim rowEng As DataRow
    dgvEngine.RowCount = 0
    If dgvEngines.SelectedRows.Count = 0 Then Exit Sub
    Dim sID As String = dgvEngines.SelectedRows(0).Cells(0).Value
    Dim a() As String
    Dim iRow As Integer
    Dim sWhere As String = " WHERE ID=" & sID

    Try

        Dim SQL As String = "SELECT  bYear, bMake, bModel, bSerial_Number, bEquipment_ID, bFuel_Type, bPower_Rating, bCyl, bLoad_Factor, bFuel_Consumption_Factor, "
        SQL &= "   bUnit_Conversion_Factor, bEmission_Category, bEmission_Family, bNOx_Emfac, bROG_Emfac, bPM_Emfac, bAnnual_Usage, bNOX_Emfac_Units, bROG_Emfac_Units, "
        SQL &= "   bPM_Emfac_Units, bAnnual_Usage_Units, bNotes"
        SQL &= " FROM     Engine_Equipment"

        rowEng = Gen.GetDataTable(SQL & sWhere).Rows(0)
        iRow = 0
        For Each col As DataColumn In rowEng.Table.Columns
            a = {rowEng(col).ToString, ""}
            dgvEngine.Rows.Add(a)
            dgvEngine.Rows(iRow).HeaderCell.Value = col.ColumnName.Substring(1)
            iRow += 1
        Next

        Sql = "SELECT  nYear, nMake, nModel, nSerial_Number, nEquipment_ID, nFuel_Type, nPower_Rating, nCyl, nLoad_Factor, "
        Sql &= "  nFuel_Consumption_Factor, nUnit_Conversion_Factor, nEmission_Category, nEmission_Family, nNOx_Emfac, nROG_Emfac, nPM_Emfac, nAnnual_Usage, "
        Sql &= "  nNOX_Emfac_Units, nROG_Emfac_Units, nPM_Emfac_Units, nAnnual_Usage_Units, nNotes"
        Sql &= " FROM     Engine_Equipment"

        rowEng = Gen.GetDataTable(SQL & sWhere).Rows(0)
        iRow = 0
        For Each col As DataColumn In rowEng.Table.Columns
            dgvEngine(1, iRow).Value = rowEng(col).ToString
            iRow += 1
        Next
        dgvEngine.AutoResizeColumns()
        dgvEngine.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders)
        dgvEngine.ClearSelection()
        dgvEngine.Columns(0).ReadOnly = True
    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        mbLoadEng = False
    End Try

它与c有什么关系?你为什么给c加标签?我愿意接受一个用c写的答案——这只是扩大了听众的范围。加上C语言的人比VB语言的人聪明多了…:我自我回答——我改变了方向。如果有人在寻找分数,那么改变当前单元格的操作肯定会得到回答。@rheitzman这一评论主要基于观点,可能会引起激烈的争论。
    mbLoadEng = True
    Dim rowEng As DataRow
    dgvEngine.RowCount = 0
    If dgvEngines.SelectedRows.Count = 0 Then Exit Sub
    Dim sID As String = dgvEngines.SelectedRows(0).Cells(0).Value
    Dim a() As String
    Dim iRow As Integer
    Dim sWhere As String = " WHERE ID=" & sID

    Try

        Dim SQL As String = "SELECT  bYear, bMake, bModel, bSerial_Number, bEquipment_ID, bFuel_Type, bPower_Rating, bCyl, bLoad_Factor, bFuel_Consumption_Factor, "
        SQL &= "   bUnit_Conversion_Factor, bEmission_Category, bEmission_Family, bNOx_Emfac, bROG_Emfac, bPM_Emfac, bAnnual_Usage, bNOX_Emfac_Units, bROG_Emfac_Units, "
        SQL &= "   bPM_Emfac_Units, bAnnual_Usage_Units, bNotes"
        SQL &= " FROM     Engine_Equipment"

        rowEng = Gen.GetDataTable(SQL & sWhere).Rows(0)
        iRow = 0
        For Each col As DataColumn In rowEng.Table.Columns
            a = {rowEng(col).ToString, ""}
            dgvEngine.Rows.Add(a)
            dgvEngine.Rows(iRow).HeaderCell.Value = col.ColumnName.Substring(1)
            iRow += 1
        Next

        Sql = "SELECT  nYear, nMake, nModel, nSerial_Number, nEquipment_ID, nFuel_Type, nPower_Rating, nCyl, nLoad_Factor, "
        Sql &= "  nFuel_Consumption_Factor, nUnit_Conversion_Factor, nEmission_Category, nEmission_Family, nNOx_Emfac, nROG_Emfac, nPM_Emfac, nAnnual_Usage, "
        Sql &= "  nNOX_Emfac_Units, nROG_Emfac_Units, nPM_Emfac_Units, nAnnual_Usage_Units, nNotes"
        Sql &= " FROM     Engine_Equipment"

        rowEng = Gen.GetDataTable(SQL & sWhere).Rows(0)
        iRow = 0
        For Each col As DataColumn In rowEng.Table.Columns
            dgvEngine(1, iRow).Value = rowEng(col).ToString
            iRow += 1
        Next
        dgvEngine.AutoResizeColumns()
        dgvEngine.AutoResizeRowHeadersWidth(DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders)
        dgvEngine.ClearSelection()
        dgvEngine.Columns(0).ReadOnly = True
    Catch ex As Exception
        MsgBox(ex.Message)
    Finally
        mbLoadEng = False
    End Try