Vb.net m commainasqlcommand Dim drMain作为SqlDataReader 将dtRow设置为Data.DataRow 作为字符串的Dim strSQL 作为整数的Dim intTeller Dim blnYearToDate为布尔值=F

Vb.net m commainasqlcommand Dim drMain作为SqlDataReader 将dtRow设置为Data.DataRow 作为字符串的Dim strSQL 作为整数的Dim intTeller Dim blnYearToDate为布尔值=F,vb.net,sharepoint,report,Vb.net,Sharepoint,Report,m commainasqlcommand Dim drMain作为SqlDataReader 将dtRow设置为Data.DataRow 作为字符串的Dim strSQL 作为整数的Dim intTeller Dim blnYearToDate为布尔值=False sCreateTable() 如果pPeriod=“年初至今”,则 perpiod=“” blnYearToDate=True 如果结束 strSQL=“从SR_销售人员中选择代码和名称” conMain.Open() comMain

m commainasqlcommand Dim drMain作为SqlDataReader 将dtRow设置为Data.DataRow 作为字符串的Dim strSQL 作为整数的Dim intTeller Dim blnYearToDate为布尔值=False sCreateTable() 如果pPeriod=“年初至今”,则 perpiod=“” blnYearToDate=True 如果结束 strSQL=“从SR_销售人员中选择代码和名称” conMain.Open() comMain=newsqlcommand(strSQL,conMain) drMain=comMain.ExecuteReader 如果drMain.HasRows,则 边读边读 dtRow=tblData.NewRow() dtRow.Item(“代码”)=drMain.Item(“代码”) dtRow.Item(“销售人员”)=drMain.Item(“名称”) dtRow.Item(“OpenOrders”)=0 dtRow.Item(“OpenOrdersCurrentPeriod”)=0 数据行项目(“发货未开票”)=0 dtRow.项目(“销售”)=0 dtRow.项目(“预计”)=0 dtRow.项目(“预算”)=0 dtRow.Item(“上一年度”)=0 tblData.Rows.Add(dtRow) 结束时 dtRow=tblData.NewRow() dtRow.Item(“代码”)=“总计” dtRow.Item(“销售人员”)=“” dtRow.Item(“OpenOrders”)=0 dtRow.Item(“OpenOrdersCurrentPeriod”)=0 数据行项目(“发货未开票”)=0 dtRow.项目(“销售”)=0 dtRow.项目(“预计”)=0 dtRow.项目(“预算”)=0 dtRow.Item(“上一年度”)=0 tblData.Rows.Add(dtRow) 如果结束 drMain.Close() comMain.Dispose() strSQL=“从SR\U SalesOpenOrdersShippedNotInvoinced中选择*” comMain=newsqlcommand(strSQL,conMain) drMain=comMain.ExecuteReader 如果drMain.HasRows,则 边读边读 对于intTeller=0到tblData.Rows.Count-1 如果tblData.Rows(intTeller.Item(“代码”)=drMain.Item(“代码”),则 tblData.Rows(intTeller.Item(“ShippedNotInvoinced”)=drMain.Item(“amountest”) 如果结束 下一个 结束时 如果结束 drMain.Close() comMain.Dispose() strSQL=“从SR\U SalesOpenOrdersPersalePerson中选择* comMain=newsqlcommand(strSQL,conMain) drMain=comMain.ExecuteReader 如果drMain.HasRows,则 边读边读 对于intTeller=0到tblData.Rows.Count-1 如果tblData.Rows(intTeller.Item(“代码”)=drMain.Item(“代码”),则 tblData.Rows(intTeller.Item(“OpenOrders”)=drMain.Item(“OpenOrders”) 如果结束 下一个 结束时 如果结束 drMain.Close() comMain.Dispose() strSQL=“从SR_salesOpenOrdersPersalePersonPerPerPerPerPerPerPerPerPerPerPeriod中选择*,其中Period=”&pPeriod&“ comMain=newsqlcommand(strSQL,conMain) drMain=comMain.ExecuteReader 如果drMain.HasRows,则 边读边读 对于intTeller=0到tblData.Rows.Count-1 如果tblData.Rows(intTeller.Item(“代码”)=drMain.Item(“销售人员代码”),则 tblData.Rows(intTeller.Item(“OpenOrdersCurrentPeriod”)=drMain.Item(“amountest”) 如果结束 下一个 结束时 如果结束 drMain.Close() comMain.Dispose() strSQL=“从SR_budgetpersalespersonperperperperperperperiod中选择*,其中strPeriod=”&pperoid&“ comMain=newsqlcommand(strSQL,conMain) drMain=comMain.ExecuteReader 如果drMain.HasRows,则 边读边读 对于intTeller=0到tblData.Rows.Count-1 如果tblData.Rows(intTeller.Item(“代码”)=drMain.Item(“strCode”),则 tblData.Rows(intTeller.Item(“预算”)=drMain.Item(“dblSales”) 如果结束 下一个 结束时 如果结束 drMain.Close() comMain.Dispose() strSQL=“从SR_histsalesspersonperperperperperiod中选择*,其中strPeriod='”&pPreviousYearPeriod&'” comMain=newsqlcommand(strSQL,conMain) drMain=comMain.ExecuteReader 如果drMain.HasRows,则 边读边读 对于intTeller=0到tblData.Rows.Count-1 如果tblData.Rows(intTeller.Item(“代码”)=drMain.Item(“strCode”),则 tblData.Rows(intTeller.Item(“上一年”)=drMain.Item(“dblSales”) 如果结束 下一个 结束时 如果结束 drMain.Close() comMain.Dispose() 如果是blnYearToDate那么 strSQL=“选择销售人员,总和(销售)作为销售,总和([销售成本])作为[销售成本],总和(利润)作为利润,总和(利润)/总和(销售)作为销售人员,编码”&_ “来自dbo.SR_销售人员”&_ “WHERE(类似于“&&Now.Year&“%”的期间)&”_ “按销售人员分组,代码” 其他的 strSQL=“从SR_salessersalPerson中选择*,其中Period=”&Period&“ 如果结束 comMain=newsqlcommand(strSQL,conMain) drMain=comMain.ExecuteReader 如果drMain.HasRows,则 边读边读 对于intTeller=0到tblData.Rows.Count-1 如果tblData.Rows(intTeller.Item(“代码”)=drMain.Item(“代码”),则 tblData.Rows(intTeller.Item(“销售”)=drMain.Item(“销售”) 如果结束 下一个 结束时 如果结束 对于intTeller=0到tblData.Rows.Count-1 使用tblData.Rows(intTeller) .Item(“预计”)=.Item(“销售”)+.Item(“发货未开票”)+.Item(“打开订单当前期间”) 以 下一个 Dim intLastRow作为整数=tblData.Rows.Count-1 对于intTeller=0到tblData.Rows.Count-2 使用tblData.Rows(intTeller) tblData.Rows(intLastRow).Item(“销售”)+=fCheckValue(.Item(“销售”)) tblData.Rows(intLastRow).Item(“OpenOrders”)+=fCheckValue(.Item(“OpenOrders”)) tblData.Rows(intLastRow).Item(“OpenOrdersCurrentPeriod”)+=fCheckValue(.Item(“OpenOrdersCurrentPeriod”)) tblData.Rows(intLastRow).Item(“ShippedNotInvoinced”)+=fCheckValue(.Item(“ShippedNotInvoinced”))
Line 367:        For intTeller = 0 To tblData.Rows.Count - 1
Line 368:            With tblData.Rows(intTeller)
Line 369:                .Item("Projected") = .Item("Sales") + .Item("ShippedNotInvoiced") + .Item("OpenOrdersCurrentPeriod")
Line 370:            End With
Line 371:        Next
Imports System.Data.SqlClient
    Partial Class Sales
        Inherits System.Web.UI.Page
    Dim tblData As New Data.DataTable
    Private Sub DataGridToExcel(ByRef grdExport As GridView, ByRef pResponse As Web.HttpResponse, ByVal pFileName As String)
    Try
        Dim intTeller As Integer = 0
        Dim strTemp As String

        pResponse.Clear()
        pResponse.AddHeader("content-disposition", "attachment;filename=" & pFileName)
        pResponse.Buffer = True
        pResponse.ContentType = "application/vnd.ms-excel"
        pResponse.Charset = ""

        Dim stringWrite As New System.IO.StringWriter
        Dim htmlWrite As New System.Web.UI.HtmlTextWriter(stringWrite)

        grdExport.RenderControl(htmlWrite)
        strTemp = stringWrite.ToString
        strTemp.Replace(",", "")
        strTemp.Replace(".", "")
        pResponse.Write(strTemp)

        pResponse.End()

    Catch ex As Exception
        'Me.lblError.Text = ex.Message
    End Try

End Sub
Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)

End Sub


Private Sub sExportGrid()

    DataGridToExcel(Me.grdSalesLines, Response, "Sales " & Format(Now, "yyyyMM") & ".xls")

End Sub

Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then

        sCreateTable()
        sFillPeriods()
        sRefreshData(Format(Now, "yyyyMM"), Format(DateAdd(DateInterval.Year, -1, Now), "yyyyMM"))



    End If
End Sub

Private Sub sFillPeriods()

    Dim conMain As New SqlConnection(sGetConnectionString)
    Dim comMain As SqlCommand
    Dim drMain As SqlDataReader

    Dim strSQL As String = "SELECT DISTINCT Period FROM [SR_SalesOverviewCompany] Order by Period DESC"
    conMain.Open()
    comMain = New SqlCommand(strSQL, conMain)

    drMain = comMain.ExecuteReader

    Me.cmbPeriods.Items.Clear()

    Me.cmbPeriods.Items.Add("Current Period")
    Me.cmbPeriods.Items.Add("Year To Date")

    If drMain.HasRows Then
        While drMain.Read
            If Not IsDBNull(drMain.Item("Period")) Then
                Me.cmbPeriods.Items.Add(drMain.Item("Period"))
            End If
        End While
    End If


End Sub
Private Function sGetConnectionString() As String

    Dim conString = ConfigurationManager.ConnectionStrings("STOKVIS LIVEConnectionString")
    Dim strConnString As String = conString.ConnectionString

    Return strConnString

End Function

Protected Sub grdSalesLines_DataBound(sender As Object, e As System.EventArgs) Handles grdSalesLines.DataBound

    If Me.cmbPeriods.SelectedItem.Text <> "Current Period" Then

        grdSalesLines.Columns(3).Visible = False
        grdSalesLines.Columns(4).Visible = False
        grdSalesLines.Columns(5).Visible = False
        grdSalesLines.Columns(7).Visible = False

    Else

        grdSalesLines.Columns(3).Visible = True
        grdSalesLines.Columns(4).Visible = True
        grdSalesLines.Columns(5).Visible = True
        grdSalesLines.Columns(7).Visible = True
    End If

End Sub

Protected Sub grdSalesLines_RowCommand(sender As Object, e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles grdSalesLines.RowCommand

    Dim intRow As Integer = CInt(e.CommandArgument)

    Response.Redirect("SalesDetails.aspx?p=" & Me.cmbPeriods.SelectedItem.Text & "&s=" & grdSalesLines.Rows(intRow).Cells(1).Text)

End Sub


Protected Sub grdSalesLines_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grdSalesLines.RowDataBound
    Dim intCounter As Integer

    If e.Row.Cells(1).Text = "Total" Then

        For intCounter = 0 To e.Row.Cells.Count - 1

            With e.Row.Cells(intCounter)
                .ForeColor = Drawing.Color.White
                .BackColor = Drawing.Color.DarkBlue
                .Font.Bold = True
            End With

        Next

    End If
End Sub

Private Sub sCreateTable()

    tblData.Columns.Clear()

    tblData.Columns.Add(New Data.DataColumn("Code", System.Type.GetType("System.String")))
    tblData.Columns.Add(New Data.DataColumn("Salesperson", System.Type.GetType("System.String")))
    tblData.Columns.Add(New Data.DataColumn("OpenOrders", System.Type.GetType("System.Double")))
    tblData.Columns.Add(New Data.DataColumn("OpenOrdersCurrentPeriod", System.Type.GetType("System.Double")))
    tblData.Columns.Add(New Data.DataColumn("ShippedNotInvoiced", System.Type.GetType("System.Double")))
    tblData.Columns.Add(New Data.DataColumn("Sales", System.Type.GetType("System.Double")))
    tblData.Columns.Add(New Data.DataColumn("Projected", System.Type.GetType("System.Double")))
    tblData.Columns.Add(New Data.DataColumn("Budget", System.Type.GetType("System.Double")))
    tblData.Columns.Add(New Data.DataColumn("PreviousYear", System.Type.GetType("System.Double")))


End Sub




Protected Sub btnRefresh_Click(sender As Object, e As System.EventArgs) Handles btnRefresh.Click

    If Me.cmbPeriods.SelectedItem.Text = "Current Period" Then
        sRefreshData(Format(Now, "yyyyMM"), Format(DateAdd(DateInterval.Year, -1, Now), "yyyyMM"))
    Else
        sRefreshData(Me.cmbPeriods.SelectedItem.Text, "")
    End If

End Sub

Protected Sub btnExcel_Click(sender As Object, e As System.EventArgs) Handles btnExport.Click
    sExportGrid()
End Sub

Protected Sub cmbPeriods_SelectedIndexChanged(sender As Object, e As System.EventArgs) Handles cmbPeriods.SelectedIndexChanged
    sCreateTable()
    If Me.cmbPeriods.SelectedItem.Text = "Current Period" Then
        sRefreshData(Format(Now, "yyyyMM"), Format(DateAdd(DateInterval.Year, -1, Now), "yyyyMM"))
    Else
        sRefreshData(Me.cmbPeriods.SelectedItem.Text, "")
    End If

End Sub

Private Sub sRefreshData(pPeriod As String, pPreviousYearPeriod As String)
    Dim conMain As New SqlConnection(sGetConnectionString)
    Dim comMain As SqlCommand
    Dim drMain As SqlDataReader
    Dim dtRow As Data.DataRow
    Dim strSQL As String
    Dim intTeller As Integer
    Dim blnYearToDate As Boolean = False

    sCreateTable()
    If pPeriod = "Year To Date" Then
        pPeriod = ""
        blnYearToDate = True
    End If


    strSQL = "SELECT code, Name from SR_SalesPerson"

    conMain.Open()
    comMain = New SqlCommand(strSQL, conMain)

    drMain = comMain.ExecuteReader

    If drMain.HasRows Then
        While drMain.Read

            dtRow = tblData.NewRow()

            dtRow.Item("Code") = drMain.Item("Code")
            dtRow.Item("SalesPerson") = drMain.Item("Name")
            dtRow.Item("OpenOrders") = 0
            dtRow.Item("OpenOrdersCurrentPeriod") = 0
            dtRow.Item("ShippedNotInvoiced") = 0
            dtRow.Item("Sales") = 0
            dtRow.Item("Projected") = 0
            dtRow.Item("Budget") = 0
            dtRow.Item("PreviousYear") = 0

            tblData.Rows.Add(dtRow)
        End While
        dtRow = tblData.NewRow()

        dtRow.Item("Code") = "Total"
        dtRow.Item("SalesPerson") = ""
        dtRow.Item("OpenOrders") = 0
        dtRow.Item("OpenOrdersCurrentPeriod") = 0
        dtRow.Item("ShippedNotInvoiced") = 0
        dtRow.Item("Sales") = 0
        dtRow.Item("Projected") = 0
        dtRow.Item("Budget") = 0
        dtRow.Item("PreviousYear") = 0

        tblData.Rows.Add(dtRow)
    End If

    drMain.Close()
    comMain.Dispose()

    strSQL = "SELECT * FROM SR_SalesOpenOrdersShippedNotInvoiced"

    comMain = New SqlCommand(strSQL, conMain)

    drMain = comMain.ExecuteReader

    If drMain.HasRows Then
        While drMain.Read
            For intTeller = 0 To tblData.Rows.Count - 1
                If tblData.Rows(intTeller).Item("Code") = drMain.Item("Code") Then
                    tblData.Rows(intTeller).Item("ShippedNotInvoiced") = drMain.Item("AmountRest")
                End If
            Next
        End While
    End If

    drMain.Close()
    comMain.Dispose()

    strSQL = "SELECT * FROM SR_SalesOpenOrdersPerSalesperson"

    comMain = New SqlCommand(strSQL, conMain)

    drMain = comMain.ExecuteReader

    If drMain.HasRows Then
        While drMain.Read
            For intTeller = 0 To tblData.Rows.Count - 1
                If tblData.Rows(intTeller).Item("Code") = drMain.Item("Code") Then
                    tblData.Rows(intTeller).Item("OpenOrders") = drMain.Item("OpenOrders")
                End If
            Next
        End While
    End If

    drMain.Close()
    comMain.Dispose()

    strSQL = "SELECT * FROM SR_SalesOpenOrdersPerSalesPersonPerPeriod WHERE Period='" & pPeriod & "'"

    comMain = New SqlCommand(strSQL, conMain)

    drMain = comMain.ExecuteReader

    If drMain.HasRows Then
        While drMain.Read
            For intTeller = 0 To tblData.Rows.Count - 1
                If tblData.Rows(intTeller).Item("Code") = drMain.Item("SalesPerson Code") Then
                    tblData.Rows(intTeller).Item("OpenOrdersCurrentPeriod") = drMain.Item("AmountRest")
                End If
            Next
        End While
    End If


    drMain.Close()
    comMain.Dispose()

    strSQL = "SELECT * FROM SR_BudgetPerSalesPersonPerPeriod WHERE strPeriod='" & pPeriod & "'"

    comMain = New SqlCommand(strSQL, conMain)

    drMain = comMain.ExecuteReader

    If drMain.HasRows Then
        While drMain.Read
            For intTeller = 0 To tblData.Rows.Count - 1
                If tblData.Rows(intTeller).Item("Code") = drMain.Item("strCode") Then
                    tblData.Rows(intTeller).Item("Budget") = drMain.Item("dblSales")
                End If
            Next
        End While
    End If

    drMain.Close()
    comMain.Dispose()


    strSQL = "SELECT * FROM SR_HistSalesPerSalesPersonPerPeriod WHERE strPeriod='" & pPreviousYearPeriod & "'"

    comMain = New SqlCommand(strSQL, conMain)

    drMain = comMain.ExecuteReader

    If drMain.HasRows Then
        While drMain.Read
            For intTeller = 0 To tblData.Rows.Count - 1
                If tblData.Rows(intTeller).Item("Code") = drMain.Item("strCode") Then
                    tblData.Rows(intTeller).Item("PreviousYear") = drMain.Item("dblSales")
                End If
            Next
        End While
    End If

    drMain.Close()
    comMain.Dispose()
    If blnYearToDate Then
        strSQL = "SELECT Salesperson, SUM(Sales) AS Sales, SUM([Cost of Sales]) AS [Cost of Sales], SUM(Margin) AS Margin, SUM(Margin) / SUM(Sales) AS SalesPercent, Code " & _
                        "FROM dbo.SR_SalesPerSalesperson " & _
                        "WHERE (Period LIKE '" & Now.Year & "%') " & _
                        "GROUP BY Salesperson, Code"
    Else
        strSQL = "SELECT * FROM SR_SalesPerSalesperson WHERE Period='" & pPeriod & "'"
    End If

    comMain = New SqlCommand(strSQL, conMain)

    drMain = comMain.ExecuteReader

    If drMain.HasRows Then
        While drMain.Read
            For intTeller = 0 To tblData.Rows.Count - 1
                If tblData.Rows(intTeller).Item("Code") = drMain.Item("Code") Then
                    tblData.Rows(intTeller).Item("Sales") = drMain.Item("Sales")
                End If
            Next
        End While
    End If

    For intTeller = 0 To tblData.Rows.Count - 1
        With tblData.Rows(intTeller)
            .Item("Projected") = .Item("Sales") + .Item("ShippedNotInvoiced") + .Item("OpenOrdersCurrentPeriod")
        End With
    Next


    Dim intLastRow As Integer = tblData.Rows.Count - 1

    For intTeller = 0 To tblData.Rows.Count - 2
        With tblData.Rows(intTeller)
            tblData.Rows(intLastRow).Item("Sales") += fCheckValue(.Item("Sales"))
            tblData.Rows(intLastRow).Item("OpenOrders") += fCheckValue(.Item("OpenOrders"))
            tblData.Rows(intLastRow).Item("OpenOrdersCurrentPeriod") += fCheckValue(.Item("OpenOrdersCurrentPeriod"))
            tblData.Rows(intLastRow).Item("ShippedNotInvoiced") += fCheckValue(.Item("ShippedNotInvoiced"))
            tblData.Rows(intLastRow).Item("Projected") += fCheckValue(.Item("Projected"))
            tblData.Rows(intLastRow).Item("Budget") += fCheckValue(.Item("Budget"))
            tblData.Rows(intLastRow).Item("PreviousYear") += fCheckValue(.Item("PreviousYear"))
        End With

    Next

    Me.grdSalesLines.DataSource = tblData
    Me.grdSalesLines.DataBind()


    Try
        drMain.Close()
        comMain.Dispose()
        conMain.Close()
    Catch ex As Exception

    End Try

End Sub

Private Function fCheckValue(pField As Object) As Double

    Dim dblValue As Double = 0

    If IsDBNull(pField) Then
        dblValue = 0
    Else
        dblValue = CDbl(pField)
    End If


    Return dblValue
End Function

End Class
Private Function GetNullableValue(Of T)(ByVal dataRow As DataRow, ByVal columnName As String, ByVal defaultIfNull As T) As T

    If Not IsDBNull(dataRow.Item(columnName)) Then
        Return CType(dataRow.Item(columnName), T)
    End If

    Return CType(defaultIfNull, T)

End Function
For intTeller = 0 To tblData.Rows.Count - 1
    Dim row As DataRow = tblData.Rows(intTeller)
    With row
        .Item("Projected") = GetNullableValue(row, "Sales", 0) + GetNullableValue(row, "ShippedNotInvoiced", 0) + GetNullableValue(row, "OpenOrdersCurrentPeriod", 0)
    End With
Next