Рейтинг:
12
Maciej Los
Если я правильно вас раскрою, вам придется рассчитать salary_base
путем добавления salary_increment
умножить на n
пока n
достигает maximum_step
.
Предполагая, что ваши данные хранятся в DataTable
объект...
'your code here till
rd = .ExecuteReader(CommandBehavior.CloseConnection)
'then
Dim dt As DataTable = New DataTable()
dt.Load(rd)
'get max of maximum_step
Dim maxstep = dt.AsEnumerable().Max(Function(x) x.Field(Of Integer)("maximum_step"))
'create final DataTable
Dim finaldt As DataTable = New DataTable()
finaldt.Columns.Add(New DataColumn("rank", Type.GetType("System.String")))
finaldt.Columns.Add(New DataColumn("grade_level", Type.GetType("System.Int32")))
'add "step" columns
For i As Integer = 1 To maxstep
finaldt.Columns.Add(New DataColumn("step_" & i, Type.GetType("System.Int32")))
Next
For Each r As DataRow In dt.Rows
Dim destRow As DataRow = finaldt.NewRow()
maxstep = r.Field(Of Integer)("maximum_step")
destRow("rank") = r.Field(Of String)("rank")
destRow("grade_level") = r.Field(Of Integer)("grade_level")
For i As Integer = 1 To maxstep
destRow("step_" & i) = r.Field(Of Double)("salary_base") + (r.Field(Of Double)("salary_increment") * i)
Next
finaldt.Rows.Add(destRow)
Next
Результат (
finaldt
содержание):
rank grade_level step_1 step_2 step_3 step_4 step_5 step_6 step_7
A 15 5000 null null null null null null
B 14 4705 4910 5115 null null null null
C 13 3685 3870 4055 4240 4425 4610 4795
Таким же образом вы можете создавать
Элементы listviewitem[
^].
[РЕДАКТИРОВАТЬ].NET 2. решение:'get max of maximum_step
Dim sortedRows = dt.Select("maximum_step>=0", "maximum_step DESC")
Dim maxstep As Integer = sortedRows.GetValue(0)("maximum_step")
'create final DataTable
Dim finaldt As DataTable = New DataTable()
finaldt.Columns.Add(New DataColumn("rank", Type.GetType("System.String")))
finaldt.Columns.Add(New DataColumn("grade_level", Type.GetType("System.Int32")))
'add "step" columns
For i As Integer = 1 To maxstep
finaldt.Columns.Add(New DataColumn("step_" & i, Type.GetType("System.Int32")))
Next
For Each r As DataRow In dt.Rows
Dim destRow As DataRow = finaldt.NewRow()
maxstep = r("maximum_step")
destRow("rank") = r("rank")
destRow("grade_level") = r("grade_level")
For i As Integer = 1 To maxstep
destRow("step_" & i) = r("salary_base") + (r("salary_increment") * i)
Next
finaldt.Rows.Add(destRow)
Next
Olaoluwa
Спасибо Мацей, к сожалению, мой проект является модификацией существующего проекта, который я когда-то разработал с использованием .NET Framework 2.0, который имеет проблемы с этой строкой кода:
Dim maxstep = dt.Методом asenumerable().Макс(функция(х) х.Поля(целого)("maximum_step"))
подчеркивание AsEnumerable().
Также эта строка кода maxstep = r.Field(Of Integer)("maximum_step") выбрасывает и ошибку, подчеркивающую все экземпляры .Поле.
Могу ли я иметь аналогичное решение, совместимое с .NET Framework 2.0?
Извините, если я прошу слишком многого.
Maciej Los
См. обновленный ответ. Я добавил решение .NET 2.0 (После части [EDIT]).
Olaoluwa
Большое спасибо, это работает.
Maciej Los
Всегда пожалуйста
Olaoluwa
Здравствуйте, мне нужна ваша помощь, пожалуйста!!!
ранг grade_level step_1 step_2 step_3 step_4 step_5 step_6 step_7
A 15 5000 null null null null null null
B 14 4705 4910 5115 null null null null
C 13 3685 3870 4055 4240 4425 4610 4795
Я хочу написать код, который вычитает 4705 из 5000 и поставит результат вместо 5000. Вычтите 3685 из 4705 и поставьте результат вместо 4705. То же самое и с другими колонками. Если результат отрицательный, он должен вернуть ноль.
То есть вычитаем снизу вверх и ставим результат сверху для всех значений, начиная с шага 1 - n, где n-максимальный шаг.
Мне нужно это решение, чтобы вычислить задолженность по продвижению. Спасибо за всю вашу помощь до сих пор.
Maciej Los
Пожалуйста, напишите еще один вопрос. Я не уверен, что смогу вам помочь.
Там много членов, которые могут вам помочь.
Olaoluwa
Спасибо, брат. Я буду делать именно это.
Olaoluwa
Я просто решаю его из sql, а не с помощью vb.net код;
выберите b.rankcode,b.gl,b.maxStep,b.sBase-a.sBase as sBase,b.sInc-a.как деше деше,б.rBase-а.rBase как rBase,б.РИНЦ-это.РИНЦ в РИНЦ
из таблице table_1 внутренний присоединиться таблице table_1 Б на.гл=б.ГЛ-1 приказ.гл алфавиту
Еще раз спасибо
Maciej Los
Отлично!
Овации,
Мацей