UCP_2005 Ответов: 1

Gridview показывает не все записи VB.NET SQL server


Всем Привет,

У меня есть таблица SalariesSettingsForEmployee, в которой сохраняются надбавки и вычеты сотрудников.

Все типы надбавок и вычетов загружаются в Столбцы GridView, а сотрудники-в строки Gridview. (с их соответствующими значениями)

Проблема заключается в том, что данные загружаются в сетку только одного (или первого) сотрудника, а не всех.

Я сделал две подпрограммы.
Вот мой код.

Пожалуйста, посоветуйте, если я делаю здесь что-то не так.

Спасибо и с уважением,

Что я уже пробовал:

Sub CreateEmployeeRows()

        Dim subtotal As Double = 0
        Dim NetTotal As Double = 0
        Dim tempval As Double = 0
        Dim rno As Integer = 0
        Dim BasicSalary As Double = 0
        Dim DeductionTotal As Double = 0
        Dim GrandTotal As Double = 0

        BasicSalary = SQLGetNumericFieldValue("Select Amount From SalariesSettingsForEmployee Where AllowanceName='BASIC SALARY'", "Amount")
        Dim dr As DataRow = dt.NewRow
        Dim sqlcmmd As New SqlClient.SqlCommand
        Try
            sqlcmmd.Connection = DAL.OpenSqlConnection
            sqlcmmd.CommandText = "Select * From SalariesSettingsForEmployee Where AllowanceType='Allowance'"
            Dim sreader As SqlClient.SqlDataReader

            sreader = sqlcmmd.ExecuteReader
            While sreader.Read


                subtotal = BasicSalary

                dr(0) = sreader("EmployeeCode").ToString
                dr(1) = sreader("EmployeeName").ToString
                dr(2) = sreader("BranchCode")
                dr(3) = sreader("BranchName")

                If sreader("AmountType").ToString = "Fixed Amount" Then
                    tempval = sreader("Amount")
                    subtotal = subtotal + tempval
                ElseIf sreader("AmountType").ToString = "Percentage" Then
                    tempval = subtotal * CDbl(sreader("Amount")) / 100
                    subtotal = subtotal + tempval
                End If
                dr(sreader("AllowanceName")) = tempval
                ''sreader("Amount")
                GrandTotal = subtotal
                dr(GrossTotalColName) = GrandTotal
                dt.Rows.Add(dr)
                txtRunPayrollGird.DataSource = dt

            End While
            sreader.Close()
            sreader = Nothing
            DAL.CloseSQLConnection()
        Catch ex As Exception

        End Try
        'End of Allowance Totals


        'Calculate Deduction Totals


        Dim cmd As New SqlClient.SqlCommand
        Try
            cmd.Connection = DAL.OpenSqlConnection
            cmd.CommandText = "Select * From SalariesSettingsForEmployee Where AllowanceType='Deduction'"

            Dim rdr As SqlClient.SqlDataReader
            rdr = cmd.ExecuteReader

            While rdr.Read
                tempval = 0

                If rdr("AmountType").ToString = "Fixed Amount" Then
                    tempval = rdr("Amount")
                    subtotal = subtotal + tempval
                    DeductionTotal = DeductionTotal + tempval
                ElseIf rdr("AmountType").ToString = "Percentage" Then
                    tempval = GrandTotal * CDbl(rdr("Amount")) / 100
                    subtotal = subtotal + tempval
                End If
                dr(rdr("AllowanceName")) = tempval
                ''sreader("Amount")

                dr(NetSalaryColName) = GrandTotal - DeductionTotal
                NetTotal = NetTotal + (GrandTotal - DeductionTotal)
                txtNetPayable.Text = NetTotal
                dt.Rows.Add(dr)
                txtRunPayrollGird.DataSource = dt
            End While

        Catch ex As Exception

        End Try
    End Sub

Sub CreateColumns()
        Dim Sqlcmmd As New SqlClient.SqlCommand
        Dim Sreader As SqlClient.SqlDataReader
        Try

            dt = New DataTable
            dt.Columns.Add("Employee ID")
            dt.Columns.Add("Employee Name")
            dt.Columns.Add("Branch Code")
            dt.Columns.Add("Branch Name")


            'For Additions

            Sqlcmmd.Connection = DAL.OpenSqlConnection
            Sqlcmmd.CommandText = "SELECT * FROM SalariesPaySettings WHERE AllowanceType='Allowance'"
            Sqlcmmd.CommandType = CommandType.Text

            Sreader = Sqlcmmd.ExecuteReader

            While Sreader.Read

                dt.Columns.Add(Sreader("AllowanceName").ToString.Trim)

            End While
            dt.Columns.Add(GrossTotalColName)
            Sreader.Close()
            Sreader = Nothing
            DAL.CloseSQLConnection()
            Sqlcmmd.Connection = Nothing
        Catch ex As Exception

        End Try
        'For Deductions
        Try


            Dim Sqlcmmd1 As New SqlClient.SqlCommand
            Sqlcmmd1.Connection = DAL.OpenSqlConnection
            Sqlcmmd1.CommandText = "SELECT * FROM SalariesPaySettings WHERE AllowanceType='Deduction'"
            Sqlcmmd1.CommandType = CommandType.Text
            Dim Sreader1 As SqlClient.SqlDataReader
            Sreader1 = Sqlcmmd1.ExecuteReader

            While Sreader1.Read

                dt.Columns.Add(Sreader1("AllowanceName").ToString.Trim)

            End While
            dt.Columns.Add(NetSalaryColName)
            txtRunPayrollGird.DataSource = dt
            Sreader1.Close()
            Sreader1 = Nothing
            DAL.CloseSQLConnection()
        Catch ex As Exception

        End Try


    End Sub

1 Ответов

Рейтинг:
1

Dave Kreskowiak

Вы должны создать новый DataRow для каждой записи, которую вы собираетесь добавить. Вы не можете повторно использовать один и тот же объект DataRow снова и снова.


UCP_2005

Спасибо Дэйв,
Я добавил новый поток данных в область дедукции кода.
Он показывает запись от EmployeeID до Gross Total в первой строке, а затем во второй строке
запись от EmployeeID до Gross Total пуста и показывает ежемесячный вычет (тип вычета) и чистую зарплату первого сотрудника.

Не могли бы вы мне помочь?

Спасибо и с уважением,

Dave Kreskowiak

Я понятия не имею, что вы сделали, и я даже не совсем уверен, что вы знаете, что делает ваш собственный код. Судя по описанию, которое вы только что дали, у меня такое чувство, что вы просто переместили линию куда-то и на самом деле не думали о том, почему вы это сделали. Это была всего лишь догадка.

Есть то, что кажется тонной проблем с этим кодом, одна из которых-GrandTotal. Вы сидите всего стоимость итого внутри цикла. Это неправильно для настоящего Грандтота.

UCP_2005

Привет, Дэйв, Спасибо за ответ. Это действительно была догадка.
Я вставил отдельные потоки данных в каждый цикл.

Пока sreader.Read
Дим ДР в качестве объекта datarow=ДТ.Невров
промежуточный итог = BasicSalary

Теперь показаны все сотрудники, но проблема заключается в том, что он создает новую строку для каждого нового руководителя зарплаты (например, базовая зарплата, транспортное пособие). Я хочу показать платежные ведомости каждого сотрудника в соответствующей строке. Пожалуйста, предложите мне способ показать все платежные ведомости любого сотрудника подряд. Спасибо.