执行crystal report时,vb.net中的索引超出范围

执行crystal report时,vb.net中的索引超出范围,vb.net,crystal-reports,Vb.net,Crystal Reports,我有这样一个vb.net代码:我正在处理vb.net windows窗体,试图执行包含3个子报表的crystal report。我给出的代码如下: Dim locid As Integer = RecordID("Locid", "Location_tbl", "LocName", CmbLocations.Text) Dim ptime As Integer = TxtTime.Text 'ViolatedRequested Dim cmd23

我有这样一个vb.net代码:我正在处理vb.net windows窗体,试图执行包含3个子报表的crystal report。我给出的代码如下:

Dim locid As Integer = RecordID("Locid", "Location_tbl", "LocName", CmbLocations.Text)
        Dim ptime As Integer = TxtTime.Text
        'ViolatedRequested
        Dim cmd23 As New SqlCommand("IBS_Delivarysummaryviolatedrequested", con.connect)
        cmd23.CommandType = CommandType.StoredProcedure
        cmd23.Parameters.Add("@locid", SqlDbType.Int).Value = locid
        cmd23.Parameters.Add("@time", SqlDbType.Int).Value = ptime
        da.SelectCommand = cmd23
        da.Fill(ds)
        Dim rpt As New DelivarySummerystatuswiserpt
        ' If (ds.Tables(0).Rows.Count > 0) Then

        rpt.SetDataSource(ds.Tables(0))
        ' CrystalReportViewer1.ReportSource = rpt
        '  End If
        'requested
        Dim cmdreqstd As New SqlCommand("IBS_Delivarysummaryrequested", con.connect)
        cmdreqstd.CommandType = CommandType.StoredProcedure
        cmdreqstd.Parameters.Add("@locid", SqlDbType.Int).Value = locid
        cmdreqstd.Parameters.Add("@time", SqlDbType.Int).Value = ptime
        da.SelectCommand = cmdreqstd
        da.Fill(ds1)
        rpt.Subreports(1).SetDataSource(ds1.Tables(0))
        ' CrystalReportViewer1.ReportSource = rpt

        ''  Parked
        Dim cmdparked As New SqlCommand("IBS_Delivarysummaryparked", con.connect)
        cmdparked.CommandType = CommandType.StoredProcedure
        cmdparked.Parameters.Add("@locid", SqlDbType.Int).Value = locid
        da.SelectCommand = cmdparked
        da.Fill(ds2)
        rpt.Subreports(2).SetDataSource(ds2.Tables(0))
        ' CrystalReportViewer1.ReportSource = rpt

        'violated Detaild
        Dim cmdvolatedDetaild As New SqlCommand("IBS_DelivarysummaryviolateDetaild", con.connect)
        cmdvolatedDetaild.CommandType = CommandType.StoredProcedure
        cmdvolatedDetaild.Parameters.Add("@locid", SqlDbType.Int).Value = locid
        cmdvolatedDetaild.Parameters.Add("@time", SqlDbType.Int).Value = ptime
        da.SelectCommand = cmdvolatedDetaild
        da.Fill(ds3)
        If (ds3.Tables(0).Rows.Count > 0) Then
            rpt.Subreports(3).SetDataSource(ds3.Tables(0))
            CrystalReportViewer1.ReportSource = rpt
        End If
执行时,我在此行中遇到错误rpt.Subreports(3).SetDataSource(ds3.Tables(0))

获取如下错误: 索引超出范围。必须为非负数且小于集合的大小。 参数名称:索引
我的代码有什么问题,如果有人知道,请帮助我找出

如果你说你有3个子报表,那么你的子报表索引是0、1和2。所以没有索引3,这就是为什么会出现错误。应该是

rpt.Subreports(0)
rpt.Subreports(1)
rpt.Subreports(2)