1

私はVB.netを学んでいます。MS VB.net を使用して、Brian Siler の特別版 (2001 年) の第 3 章に従っています。VB ではあまり変わっていないように見えますが、ツールボックスからテーブルを追加する際に問題が発生しました。

ツールボックス (Visual Studio 2012 Express のバージョン、ASP.net 2012) には、VB.net プロジェクトをビルドするために、TextBox や Table などの項目があります。Web アプリを構築するために、TextBox、Label などを追加して問題なくコーディングできます。ただし、テーブルを追加すると問題が発生します。

Textbox と Label と同様に、tblAmortize最初にテーブル ID の名前を ( に ) 変更します。次に、彼らの本からコードを入力すると、エラーが発生しました。

'tblAmortize' is not declared. It may be inaccessible due to its protection level"

私が知っているように、 TextBox アイテムなどは、txtPrincipal.Text使用するときに宣言する必要はありません。しかし、この「テーブル」tblAmortizeアイテムは最初に宣言する必要があるtblAmortizeようです。完全なコードは次のとおりです。Form 2btnShowDetail_ClickForm 1


Public Class Hello_Web
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Dim intTerm As Integer                'Term, in years
        Dim decPrincipal As Decimal           'Principal amount $
        Dim decIntRate As Decimal             'Interst rate %
        Dim dblPayment As Double              'Monthly payment $

        Dim decMonthInterest As Decimal       'Interest part of monthly payment
        Dim decTotalInterest As Decimal = 0   'Total interest paid
        Dim decMonthPrincipal As Decimal      'Principal part of monthly pament
        Dim decTotalPrincipal As Decimal = 0  'Remaining principal

        Dim intMonth As Integer               'Current month
        Dim intNumPayments As Integer         'Number of monthly payments
        Dim i As Integer                      'Temporary loop counter
        Dim rowTemp As TableRow               'Temporary row object
        Dim celTemp As TableCell              'Temporary cell object

        If Not IsPostBack Then        'Evals true first time browser hits the page
            'SET Up THE TABLE HEADER ROW
            rowTemp = New TableRow()
            For i = 0 To 4
                celTemp = New TableCell()
                rowTemp.Cells.Add(celTemp)
                celTemp = Nothing
            Next
            rowTemp.Cells(0).Text = "Payment"
            rowTemp.Cells(1).Text = "Interest"
            rowTemp.Cells(2).Text = "Principal"
            rowTemp.Cells(3).Text = "Total Int."
            rowTemp.Cells(4).Text = "Balance"
            rowTemp.Font.Bold = True
            tblAmortize.Rows.Add(rowTemp)


            'PULL VALUES FROM SESSION VARIABLES

            intTerm = Convert.ToInt32(Session("term"))
            decPrincipal = Convert.ToDecimal(Session("Principal"))
            decIntRate = Convert.ToDecimal(Session("IntRate"))
            dblPayment = Convert.ToDecimal(Session("decPayment"))

            'CALCULATE AMORTIZATION SCHEDULE
            intNumPayments = intTerm * 12
            decTotalPrincipal = decPrincipal
            For intMonth = 1 To intNumPayments
                'Determine Values For the Current Row
                decMonthInterest = (decIntRate / 100) / 12 * decTotalPrincipal
                decTotalInterest = decTotalInterest + decMonthInterest
                decMonthPrincipal = Convert.ToDecimal(dblPayment) - decMonthInterest
                If decMonthPrincipal > decPrincipal Then
                    decMonthPrincipal = decPrincipal
                End If
                decTotalPrincipal = decTotalPrincipal - decMonthPrincipal

                'Add the values to the table
                rowTemp = New TableRow()
                For i = 0 To 4
                    celTemp = New TableCell()
                    rowTemp.Cells.Add(celTemp)
                    celTemp = Nothing
                Next i

                rowTemp.Cells(0).Text = intMonth.ToString
                rowTemp.Cells(1).Text = Format(decMonthInterest, "$###0.00")
                rowTemp.Cells(2).Text = Format(decMonthPrincipal, "$###0.00")
                rowTemp.Cells(3).Text = Format(decTotalInterest, "$###0.00")
                rowTemp.Cells(4).Text = Format(decTotalPrincipal, "$###0.00")

                tblAmortize.Rows.Add(rowTemp)
                rowTemp = Nothing
                'PrevFormat()

            Next intMonth
        End If

    End Sub


    Protected Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
        Dim decPrincipal As Decimal
        Dim decIntRate As Decimal
        Dim intTerm As Integer, dblPayment As Double

        'Store the principle in the variable decprincipal
        'decPrincipal = CDbl(txtPrincipal.Text)
        decPrincipal = (txtPrincipal.Text)

        'Convert interest rate to its decimal equivalent
        ' i.e. 12.75 becomes 0.1275
        decIntRate = CDbl(txtIntrate.Text) / 100

        'Convert annual interest rate to monthly
        '  by dividing by 12 (months in a year)
        decIntRate = decIntRate / 12

        'Convert number of years to number of months
        '  by multiplying by 12 (months in a year)
        intTerm = CDbl(txtTerm.Text) * 12

        'Calculate and display the monthly payment.
        '  The format function makes the displayed number look good.
        dblPayment = decPrincipal * (decIntRate / (1 - (1 + decIntRate) ^ -intTerm))
        txtPayment.Text = Format(dblPayment, "$#,##0.00")

        'Add Amortization Schedule
        '  The Schedule button will be shown only after you click the Calculate Payment LinkButton
        btnShowDetail.Visible = True
    End Sub

    Protected Sub btnShowDetail_Click(sender As Object, e As EventArgs) Handles btnShowDetail.Click

        'Storetext box values in session variables
        Session.Add("Principal", txtPrincipal.Text)
        Session.Add("IntRate", txtIntrate.Text)
        Session.Add("Term", txtTerm.Text)
        Session.Add("Payment", txtPayment.Text)

        'Display the Amortization form
        Response.Redirect("frmAmort.aspx")
    End Sub
End Class
4

1 に答える 1

0

テーブルを宣言するときは、runat = "Server" と記述する必要があります。

これはコードサンプルです

<Table ID = "tblMyTable" runat = "Server">
    .
    .
    .
</Table>

これで、テーブルをコードで使用できます。

Form2 のコードで既にテーブルにアクセスでき、Form1 のコードでアクセスしたい場合、およびその方法がわからない場合の解決策は次のとおりです。

Dim tbl as new Table
tbl = CType(Form1.FindControl("tblMyTable"),Table)
于 2013-05-29T20:41:55.833 に答える