在Visual Basic中偏移DataGridView构建

时间:2014-01-19 21:59:17

标签: vb.net winforms visual-studio-2010 datagridview

我目前正在尝试在Visual Basic中构建一个汽车竞赛跟踪程序来替换当前使用的旧Excel方法。该程序只跟踪四个通道,旨在使用添加或导入数据网格视图的信息构建竞赛网格。比赛网格需要建立一个集合,根据加热量在每条车道上运行每辆车。例如。有2次加热,每辆车需要两次运行四个车道中的每一个。我遇到的麻烦是开发代码以正确地将数据组装到网格中。设置网格的最简单方法是有四列,每列都在,网格偏移一列。

代码设置: 信息来自名为gridRacerInfo的datagridview。只需要第0列和第1列。它们被加在一起以形成名称和车号。名为gridRaceBuild的实际竞争网格包含5列。第一列由代码处理,通过设置赛车手数量所需的比赛数量乘以加热次数。构建比赛网格的按钮仅在添加至少四个赛车后才会激活,但程序需要支持不同的赛车组合和加热量。我开发的一些代码填充了实际网格,但没有偏移网格,因此每个赛车都没有根据加热量对每条赛道进行竞赛。

Example Grid

网格应该在某种程度上看起来像这样。减去地点栏。

我尝试过的一些代码:

        gridRaceBuild.RowCount = varNumberofRacers * NumberOfHeats.Value
    For varBuildGridColumns As Integer = 1 To 4
        For varBuildGridRows As Integer = 0 To varNumberofRacers * NumberOfHeats.Value - 1
            If varBuildShiftCatch Then
                gridRaceBuild.Item(varBuildGridColumns, varBuildGridRows).Value = gridRacerInfo.Item(0, varBuildGridRows + varBuildShift).Value & " - " & gridRacerInfo.Item(1, varBuildGridRows).Value
        Next varBuildGridRows
        If varBuildShift < 0 Then
            varBuildShift = varBuildShift + 1
        End If
        If varBuildShift = 5 Then
            varBuildShift = 0
        End If
    Next varBuildGridColumns

任何帮助都会很棒。 先感谢您, 内特

修改的 如评论所述,添加有效且无效的代码。

我试图设置IF和那些陷阱,例如Case陷阱。

此代码将构建没有错误的表。虽然它不会像它应该的那样抵消赛车手。 例如,如果有四个赛车的车号为1到4,那么加热看起来像这样: 热火1:车1 |车1 |车1 |车1 | 热火2:车2 |车2 |车2 |车2 | ... 什么时候应该

加热1:车1 |车2 |车3 |车4 | 热火2:车2 |车3 |车4 |车1 | ...

所以简单地说,我需要选择包围,以便汽车运行每个轨道。我对代码的另一个问题是,如果需要,每辆车必须不止一次运行轨道。这也将使比赛网格的尺寸加倍。

 gridRaceBuild.RowCount = varNumberofRacers * NumberOfHeats.Value
    For varBuildGridColumns As Integer = 1 To 4
        For varBuildGridRows As Integer = 0 To varNumberofRacers * NumberOfHeats.Value - 1
                gridRaceBuild.Item(varBuildGridColumns, varBuildGridRows).Value = gridRacerInfo.Item(0, varBuildGridRows + varBuildShift).Value & " - " & gridRacerInfo.Item(1, varBuildGridRows).Value
        Next varBuildGridRows
    Next varBuildGridColumns

此代码根据汽车每条车道需要运行的次数来获取表格大小的汽车:

gridRaceBuild.RowCount = varNumberofRacers * NumberOfHeats.Value

更新

我已经开发了一些代码,可以完美地创建竞赛网格的前两行。

gridRaceBuild.RowCount = varNumberofRacers
    For varBuildGridColumns As Integer = 1 To 4
        varBuildShiftCatch = True
        For varBuildGridRows As Integer = 0 To varNumberofRacers - 1
            Select Case varBuildGridColumns
                Case 1
                    gridRaceBuild.Item(varBuildGridColumns, varBuildGridRows).Value = gridRacerInfo.Item(0, varBuildGridRows).Value & " - " & gridRacerInfo.Item(1, varBuildGridRows).Value
                Case 2
                    varBuildShift = 1
                    If varBuildShiftCatch = True Then
                        If varBuildGridRows = varNumberofRacers - 2 Then
                            varBuildShiftCatch = False
                        End If
                        gridRaceBuild.Item(varBuildGridColumns, varBuildGridRows).Value = gridRacerInfo.Item(0, varBuildGridRows + varBuildShift).Value & " - " & gridRacerInfo.Item(1, varBuildGridRows + varBuildShift).Value
                    Else
                        gridRaceBuild.Item(varBuildGridColumns, varBuildGridRows).Value = gridRacerInfo.Item(0, varBuildGridRows - (varNumberofRacers - 1)).Value & " - " & gridRacerInfo.Item(1, varBuildGridRows - (varNumberofRacers - 1)).Value
                    End If

此部分代码将创建竞赛网格的前两列。如上面的链接所示,正确地将汽车抵消一个。事实证明,我每次都在向告诉程序将汽车偏移一个的变量添加,而它应该是静态的。问题是,当代码被引入下一列时,它会在网格上留下一个空白单元格,并且不会再次正确地抵消汽车。我已经尝试更改代码中包含的许多变量,但它们都会产生错误。

0 个答案:

没有答案