Member 14114880
Я сделал код, чтобы сделать это в VB.net
это просто
1-получает таблицу для текущего существующего сотрудника
2 - Установите строки сетки отображения (DGV) равными существующему номеру сотрудника
3 - Установите номер столбца DGV равным периоду поиска плюс два (имя и позиция)
4 - получить строковую матрицу имени присваивания с их идентификатором s в качестве индекса
5 - поиск каждого идентификатора сотрудника в течение этого периода и помещает найденные данные в сетку, вычитая дату назначения из даты начала поиска, чтобы получить номер дня и добавить два в качестве индекса столбца (два-это сдвиг, чтобы освободить место для столбца имени и должности)
5 - номер строки-это заказ сотрудника в таблице данных сотрудника
это происходит медленно, потому что он ищет в базе данных как количество сотрудников (огромное количество)
В настоящее время я работаю над созданием поиска по одной таблице для определенного периода, сгруппированного по идентификатору сотрудника
и распределить их по сетке
все равно моя проблема даже если это сработает хорошо
Мне нужно его напечатать
а crystal reports работает быстрее и избавляет меня от необходимости настраивать страницу
ниже приведен код, который я сделал
Он имеет некоторые зависимости которые в свою очередь имеют некоторые зависимости
но если кто-то хочет получить представление, то это здесь
если кому-то нужны зависимости, я буду более чем счастлив дать их бесплатно
(помогите, как вы хотите, чтобы помогли)
Private Sub UpdateMonthAssigmentGrid()
Dim IntMonth As Integer = ComboDisplayedMonth.SelectedIndex + 1 '7 'месяц для поиска
Дим IntYear Как Integer = NumericUpDownDisplayedYear.Значение '2018 'года, чтобы быть найдены
Dim IntMonthLengthDays As Integer = GetMonthLength(IntYear, IntMonth) 'количество дней в месяце (31,30,29,28) для установки номера столбцов сетки
Dim StrStartDate As String = "'" + IntYear.ToString + "-" + IntMonth.ToString + "-01'" 'начало даты поиска
Dim StrEndDate As String = "'" + IntYear.ToString + "-" + IntMonth.ToString + "-" + IntMonthLengthDays.ToString + "'" 'дата окончания поиска
Dim IntDayIndex Как Целое Число
Дим StrAssigmentTypeList() как строку матрицы фамилий Распайка
Dim IntIDAssigment2Order() как целочисленная матрица присвоения идентификатора порядку Аппера
'
Dim GridColNo As Integer = 2 'номер столбца, используемого для отображения данных(имя и ранг)
'
Dim IntEmpolyeeCounter как целочисленная Фиктивная переменная, используемая в цикле для empolyees
Dim INtDaysCounter как целочисленная Фиктивная переменная, используемая в цикле в течение нескольких дней
'
Dim TblEmpolyeeNames As Data.DataTable 'таблица данных, содержащая имена и ранги empolyees
Dim IntEmpolyeeNo As Integer 'the no of empolyee = TblEmpolyeeNames.Rows.Count будет использоваться для установки количества отображаемых строк сетки
Дим IntIdEmpolyee как целочисленная переменная 'манекен, который используется для хранения в настоящее время обрабатываются
Дим TblMonthAssigment Как Данные.Таблицы данных таблица данных проведение empolyees имена и звания
'= ReadDataTable("выберите TblEmpolyee.Идемполии ,Тблемполии.EmpolyeeName ,TblRank.RankName из TblEmpolyee слева присоединяется к TblRank TblRank на TblRank.IDRank= TblEmpolyee.IDRank, где без отрыва от производства= "истинный" порядок TblEmpolyee.IDRank DESC")
Тусклый StrAssigmentDate Как Строка
Дим IntAssigmentType Как Целое, IntAssigmentOrder Как Целое
Тусклый ShowedDayDAte Как Дата
Dim StrMonthlyAssigmentSql Как Строка
'
'ReadSql2DataGrid(DataGridView1, "SELECT [IDEmpolyee],[EmpolyeeName] from TblEmpolyee")
'DataGridView1.DataSource = Ничего
Если Радиобоффрепорт.Проверено = Истина Тогда
TblEmpolyeeNames = ReadDataTable("выберите TblEmpolyee.Идемполии ,Тблемполии.EmpolyeeName ,TblRank.RankName из TblEmpolyee слева присоединяется к TblRank TblRank на TblRank.IDRank= TblEmpolyee.IDRank, где InService='True' и TblEmpolyee.IDRank > 8 заказ от TblEmpolyee.IDRank DESC")
Еще
TblEmpolyeeNames = ReadDataTable("выберите TblEmpolyee.Идемполии ,Тблемполии.EmpolyeeName ,TblRank.RankName из TblEmpolyee слева присоединяется к TblRank TblRank на TblRank.IDRank= TblEmpolyee.IDRank, где InService='True' и TblEmpolyee.IDRank <9 заказ от TblEmpolyee.IDRank DESC")
Конец, Если
'
'DGVMonthlyReport.Источник Данных = TblEmpolyeeNames
-Выход Из Субмарины
Если Радиосвязь Есть, То Да.Проверено = Истина Тогда
StrMonthlyAssigmentSql = "выберите TblDailyAssigment.IDDailyAssigment, TblDailyAssigment.Assignmentdate,TblAssigmentTypeGeneral.Assignmenttypegeneralname ,TblAssigmentTypeGeneral.IDAssigmentTypeGeneral от TblDailyAssigment левое соединение TblAssigmentType TblAssigmentType на TblAssigmentType.IDAssigmentType =TblDailyAssigment.IDAssigmentType левое соединение TblAssigmentTypeGeneral TblAssigmentTypeGeneral на TblAssigmentTypeGeneral.IDAssigmentTypeGeneral=TblAssigmentType.IDAssigmentTypeGeneral"
ReadSql2CStrgArry(StrAssigmentTypeList, "TblAssigmentTypeGeneral", "Assignmenttypegeneralname", "")
ReadSql2IDCorrMat(IntIDAssigment2Order, "TblAssigmentTypeGeneral", "IDAssigmentTypeGeneral", "")
Еще
Если Радио-Телохранители.Проверено = Истина Тогда
- Покажи ежемесячную охрану.
StrMonthlyAssigmentSql = "выберите TblDailyAssigment.IDDailyAssigment, TblDailyAssigment.Assignmentdate,TblGuard.Имя Охранника ,TblGuard.IDGuard из TblDailyAssigment слева присоединяется к TblAssigmentType TblAssigmentType на TblAssigmentType.IDAssigmentType =TblDailyAssigment.IDAssigmentType левое соединение TblGuard TblGuard на TblGuard.IDGuard= TblDailyAssigment.IDGuard"
ReadSql2CStrgArry(StrAssigmentTypeList, "TblGuard", "GuardName", "")
ReadSql2IDCorrMat(IntIDAssigment2Order, "TblGuard", "IDGuard", "")
Еще
- покажите ежемесячное подробное назначение
StrMonthlyAssigmentSql = "выберите TblDailyAssigment.IDDailyAssigment, TblDailyAssigment.Assignmentdate,TblAssigmentType.Assignmenttypename ,TblAssigmentType.IDAssigmentType от TblDailyAssigment левое соединение TblAssigmentType TblAssigmentType на TblAssigmentType.IDAssigmentType =TblDailyAssigment.IDAssigmentType"
ReadSql2CStrgArry(StrAssigmentTypeList, "TblAssigmentType", "Assignmenttypename", "")
ReadSql2IDCorrMat(IntIDAssigment2Order, "TblAssigmentType", "IDAssigmentType", "")
Конец, Если
Конец, Если
'
'установить сетку Holding подробная empolyee данных распайка
IntEmpolyeeNo = TblEmpolyeeNames.Rows.Рассчитывать
DGVMonthlyReport.Rows.Четкий()
DGVMonthlyReport.Количество Строк = IntEmpolyeeNo
DGVMonthlyReport.ColumnCount = GridColNo + IntMonthLengthDays 'количество дней плюс количество столбцов, используемых для отображения данных(имя и ранг)
'Отображение названия дня недели в каждый день
Для s = 1 до IntMonthLengthDays
ShowedDayDAte = CDate(IntYear.ToString + "-" + IntMonth.Метод toString + "-" + ы.Метод toString)
DGVMonthlyReport.Столбцы.Item(s + GridColNo - 1).HeaderText = GetArabicDayName(ShowedDayDAte) + "_" + s.ToString
Следующий
'
'установить сетку Holding подробная empolyee данных распайка
DGVMontlyREportSum.Rows.Четкий()
DGVMontlyREportSum.Количество Строк = IntEmpolyeeNo
DGVMontlyREportSum.ColumnCount = StrAssigmentTypeList.GetUpperBound(0) + GridColNo
Для s = 0 в StrAssigmentTypeList.GetUpperBound(0)
DGVMontlyREportSum.Столбцы.Пункт(s + 1).HeaderText = StrAssigmentTypeList(s)
Следующий
Для IntEmpolyeeCounter = 0 До IntEmpolyeeNo - 1
IntIdEmpolyee = ReadDataTableItem(TblEmpolyeeNames, 0, IntEmpolyeeCounter)
-Отладка.Печать(IntIdEmpolyee)
TblMonthAssigment = ReadDataTable(StrMonthlyAssigmentSql + " where IDEmpolyee=" + IntIdEmpolyee.ToString + "и Assignmentdate между" + StrStartDate + " и " + StrEndDate)
Если TblMonthAssigment.Rows.Тогда считайте > 0
Для INtDaysCounter = 0 До TblMonthAssigment.Rows.Количество - 1
StrAssigmentDate = ReadDataTableItem(TblMonthAssigment, 1, INtDaysCounter)
StrAssigmentDate = Mid(StrAssigmentDate, 9, 2)
IntDayIndex = Val(StrAssigmentDate)
'
DGVMonthlyReport.Item(IntDayIndex + GridColNo - 1, IntEmpolyeeCounter).Value = ReadDataTableItem(TblMonthAssigment, 2, INtDaysCounter)
'
IntAssigmentType = ReadDataTableItem(TblMonthAssigment, 3, INtDaysCounter)
IntAssigmentOrder = IntIDAssigment2Order(IntAssigmentType)
DGVMontlyREportSum.Item(IntAssigmentOrder + GridColNo - 1, IntEmpolyeeCounter).Value = DGVMontlyREportSum.Item(IntAssigmentOrder + GridColNo - 1, IntEmpolyeeCounter).Value + 1
Следующий
'
Конец, Если
DGVMonthlyReport.Item(1, IntEmpolyeeCounter).Value = ReadDataTableItem(TblEmpolyeeNames, 1, IntEmpolyeeCounter)
DGVMonthlyReport.Item(0, IntEmpolyeeCounter).Value = ReadDataTableItem(TblEmpolyeeNames, 2, IntEmpol