0

VB.NET4.0フレームワークのWindowsフォームアプリケーション。したがって、DesignerのフォームにドロップしたDataGridViewがあり、すべての列をreadOnly 、、、に設定し AllowUserToAddRows = FalseますAllowUserToDeleteRows = False。さて、コードがうまくいかない部分についてです。

私の関数は次のようになります:

    Private Sub fill_items()
    Dim prop As List(Of property_info) = db.property_info.ToList
    Dim units As List(Of unit) = db.units.ToList
    Dim _year As Integer = System.DateTime.Now.Year
    Dim fin As List(Of financial) = db.financials.Where(Function(f) f.Year_start.Value.Year = _year).OrderBy(Function(f) f.transaction_date).ToList

    Dim x As Integer = 0

    For Each _i In prop

        x += 1
        Dim _typeName As String = String.Empty
        Dim i As property_info = _i
        Select Case i.property_type
            Case Is = 0
                _typeName = "Storage"
            Case Is = 1
                _typeName = "House/Apartment"
            Case Is = 2
                _typeName = "Office Space"
        End Select

        reports1GridView.Rows.Add(_typeName, i.property_Name, " ", " ", " ", " ")

        For Each _t In units.Where(Function(f) f.propertyId = i.idProperties)
            Dim t As unit = _t
            x += 1
            For Each trans In fin.Where(Function(F) F.Unit_finId = t.UnitId)
                x += 1
                Dim _ttype As String = String.Empty
                Dim _typeCheck As Integer = 0
                Select Case trans.transaction_type
                    Case Is = 0
                        _ttype = "Payment Recieved"
                        _typeCheck = 0
                    Case Is = 2
                        _ttype = "Rent Charged"
                        _typeCheck = 1
                    Case Is = 3
                        _ttype = "Deposit"
                        _typeCheck = 1
                    Case Is = 20
                        _ttype = "Late Fee"
                        _typeCheck = 0
                    Case Is = 4
                        _ttype = "Auction Collection"
                        _typeCheck = 0
                    Case Is = 5
                        _ttype = "Auction Fee"
                        _typeCheck = 2
                    Case Is = 6
                        _ttype = "City Tax"
                        _typeCheck = 0
                    Case Is = 7
                        _ttype = "County Tax"
                        _typeCheck = 0
                    Case Is = 8
                        _ttype = "State Tax"
                        _typeCheck = 0
                    Case Is = 9
                        _ttype = "Maintenance"
                        _typeCheck = 2
                End Select

                Dim _TypeValue As Decimal = Nothing
                Select Case _typeCheck
                    Case Is = 0
                        _TypeValue = trans.Amount_Paid
                    Case Is = 1
                        _TypeValue = trans.amount_due
                    Case Is = 2
                End Select
                Dim _tDate As Date = trans.transaction_date
                Dim _tDateString As String = _tDate.ToShortDateString.ToString
                reports1GridView.Rows.Add(" ", " ", t.UnitId, _ttype, _tDateString, _TypeValue)

                Dim xl As String = String.Empty
            Next
        Next
    Next
End Sub

私の問題は、datagridviewがgridviewの0,1,2,3列の値のみを表示していることです。Gridviewは、トランザクションタイプが移動する列3に到達するまで正しく表示されます。何らかの理由で、列5にあるはずの量がその列に表示され、列4と5は完全に空白のままになっています。前回のreports1GridView.Rows.Addの変数に含まれている値を確認しました。すべての変数は正しいだけでなく、正しい順序になっています。だから私の質問は、なぜこれが失敗するのかということです...

4

1 に答える 1

1

DataGridViewがバインドされていない(つまり、列が自動的に定義されていない)と仮定すると、コードに必要な適切な列を作成する必要があります。その後、Row.Add(item、....)が機能します

例えば:

Private Sub SetupGrid()
    reports1GridView.ColumnCount = 5
    reports1GridView.Columns(0).Name = "Type"
    .... ' other columns
End Sub

メインループに入る前に、このメソッドを呼び出して列の名前とタイプを定義します

于 2012-04-26T21:14:55.943 に答える