Разработка модуля по учету графиков труда и отдыха локомотивных бригад эксплуатационного локомотивного депо автоматизированной информационной системы АРМ "Нарядчик"

Анализ функциональных возможностей автоматизированной информационной системы АРМ "Нарядчик". Разработка базы данных и web-интерфейса модуля по учёту графиков труда и отдыха локомотивных бригад эксплуатационного локомотивного депо АИС АРМ "Нарядчик".

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 06.07.2015
Размер файла 1,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

ЭкОЗ - Экспертное определение состояния здоровья машиниста. Программа разработчик ЗАО Нейроком.

Электронный паспорт локомотива - автоматизированная система ведения и учета технических паспортов локомотива - их электронных копий.

ЭСУП ТПС - ИНФОРМАЦИОННая СИСТЕМа УЧЕТА ПРОСТОЕВ ТЯГОВОГО ПОДВИЖНОГО СОСТАВА.

ЭЦ - пост ЭЦ. Пост электрической централизации.

IRIS - Международный стандарт железнодорожной промышленности

ЦД

Департамент управления перевозками

НСИ

Нормативно-справочная информация

АСОУП-2

Автоматизированная система оперативного управления перевозками

ОКДБ

Подсистема АСОУП «Оперативный контроль дислокации бригад»

ГИД Урал - ВНИИЖТ

Автоматизированная система ведения и анализа графика исполненного движения (ГИД Урал - ВНИИЖТ)

ПТК

Программно-технический комплекс

АРМ

Автоматизированное рабочее место

АС

Автоматизированная система

АСУ

Автоматизированная система управления

ЦУП

Центр управления перевозками ОАО «РЖД»

ДЦУП

Дорожный центр управления перевозками

АСУТ

Автоматизированная система управления локомотивным хозяйством

АРМ ТЧБ

АРМ нарядчика локомотивного депо АСУТ

АРМ ТЧД

АРМ диспетчера АСУТ

АСУТ-Т

Информационно-сигнальная система контроля работы локомотивов и локомотивных бригад (подсистема АСУТ дорожно-регионального уровня)

ПЛАН-ЛБ

Автоматизированная система суточного планирования локомотивных бригад

СПРБ

Сменно-суточный план регулирования локомотивными бригадами грузового движения

ТПРБ

Текущий план регулирования локомотивными бригадами грузового движения

ТНЦ

Локомотивный диспетчер ДЦУП

ТНЦО

Оператор при ТНЦ

ТЧД

Дежурный по локомотивному депо

ЛБ

Локомотивная бригада

ФИО

Фамилия, имя, отчество

СОИ

Система оперативного информирования

Сообщение код 90 - о маневрах локомотивов в депо и на станции.

Сообщение 235 - об изменении справочных данных локомотива.

Перечень сокращений и терминов

АСОУП - автоматизированной системой оперативного управления перевозками

АРМ ТЧЗЭ -АРМ Заместителя начальника депо по эксплуатации АСУТ.

КИП - Контрольно-инструкторская поездка

ОКДБ, ОКДЛ - блок ОКДБ (оперативный контроль дислокации бригад) и ОКДЛ (оперативный контроль дислокации локомотивов) входят в состав АСОУП

КПЗ - код пункта зарождения информации . Включает в себя КОС и КСО.

КОС - код отправителя сообщения

КСО - код пункта совершения операции

Сообщения ОКДБ

Сообщение 265 - Нарушение режима работы

Сообщение 267 - об операциях с бригадой

Сообщение 268 - паспортные данные машиниста

Сообщение 269 - Данные приказов

Сообщение 270 - Журнал нарядов локомотивных бригад

Сообщение 333 - ?

Сообщения ОКДЛ

230 сообщения “Об изменении состояния локомотива”

231 сообщения “Об объединении и разъединении локомотива”

233 сообщения “Об изменении контролируемого парка”

234 сообщения “Корректировка пробегов”

235 сообщения “Об изменении депо приписки локомотива”

Сообщения ИОММ

1750 "Сведения о постановке\ выпуске локовотивов в НЭП\из НЭПа"

1751 "Сведения о простое локомотивов в ЭП"

ГЭД--готовность к экстренному действию (в условиях интенсивного движения)

ПВ--переключение внимания

ПУ--помехоустойчивость

СТР--стрессоустойчивость

ОБМЭ--оценка бдительности машиниста электропоезда (в условиях интенсивного движения)

СДР--сложная двигательная реакция

ОВ--объём внимания

ABAP/4 (Advanced Buisness application programming 4GL) - язык программирования в SAP R/3.

Приложение 2

Техническое задание

на разработку модуля «Учет графиков труда и отдыха локомотивных бригад эксплуатационного депо»

1 Общие сведения

1.1. Наименование системы

Модуль информационной системы «Учет графиков труда и отдыха локомотивных бригад локомотивного депо».

1.2 Наименования Разработчика и Заказчика работ и их реквизиты

Разработчик:

Кашеварова Анастасия Викторовна

Заказчик:

БИФ КемГУ(полное название)

1.3 Основание для проведения работ

Основанием для проведения работ по созданию модуля ИС "Учета труда и отдыха локомотивных бригад" являются следующие документы:

- задание на ВКР (дипломный проект) БИФ КемГУ

1.4 Сроки начала и окончания работ

Дата начала работ: 01.04.2015

Дата окончания работ: 15.05.2015

1.5 Порядок оформления и предъявления Заказчику результатов работ

Работы по созданию модуля ИС производятся и принимаются поэтапно.

2 Назначение и цели создания системы

2.1. Назначение системы

ИС "Учет труда и отдыха локомотивных бригад эксплуатационного локомотивного депо" предназначена для:

- автоматизации работ при составлении графиков труда и отдыха локомотивных бригад;

- планирования работ по составлению графиков;

- ведения учета и контроля выполнения работ;

- оперативное планирование графиков, в связи с отсутствием работников локомотивного эксплуатационного депо;

- учет рабочего времени на выполнение заданий;

- сбор статистической информации по работам и исполнителям;

2.2. Цели создания системы

Система «Учет графиков труда и отдыха локомотивных бригад эксплуатационного депо» предназначена для расширения функционала ИС АРМ «Нарядчик».

3 Характеристика объектов информатизации

3.1. Краткое описание работы нарядчика

К основным направлениям работы нарядчика относятся:

- обеспечивать планирование прибывающих локомотивных бригад по графику;

- своевременно вызов локомотивных бригад на явку;

- введение отчетной документации в бумажном виде;

- осуществлять контроль продолжительности рабочего времени по участкам обслуживания выполнения норм отдыха в пунктах оборота и домашнего отдыха;

- планировать и организовывать именные графики.

3.2. Работа с отчетами

В модуле ИС "учет графиков труда и отдыха локомотивных бригад эксплуатационного локомотивного депо" предусмотрена возможность построения различных отчетов. Производит отчеты по регулировки часов, производит постановку в наряд следующие сутки. Пользователь имеет возможность вывести отчет на печать или сохранить отчет на диске.

4 Требования к информационной системе

4.1. Базовые принципы разработки модуля

При разработке модуля ИС должны использоваться следующие базовые принципы:

- исключение дублирования ввода информации и повышение ее достоверности, за счет отождествления ранее введенной информации;

ИС должна удовлетворять следующим требованиям:

- пользовательский интерфейс системы должен быть сформирован в соответствии с навыками и профилем пользователей;

ИС должна содержать:

- Средства поиска информации;

Выбор прикладного программного обеспечения системы должен удовлетворять следующим критериям:

- Интеграция с базами данных, поддерживающих Web-технологии;

4.2. Требования к архитектуре системы.

Архитектура системы «Система» является трехзвенной. В качестве клиентского приложения выступает стандартный веб-браузер.

4.3. Требования к способам и средствам связи для информационного обмена между компонентами (модулями) ИС

Подсистемы должны взаимодействовать в пределах единой компьютерной сети (Интернет), в которой происходит весь обмен информацией.

4.4. Требования к характеристикам взаимосвязей системы со смежными системами

Смежными системами для информационной системы «Учет графиков труда и отдыха» является: «АРМ Нарядчик».

4.5. Требования к режимам функционирования подсистемы

Разрабатываемая система должна функционировать 24 часа в сутки, 365 дней в году.

4.6. Требования к пользователям

Нарядчик - имеет доступ к просмотру общих данных, а также к просмотру и редактированию личных данных работников локомотивных бригад.

4.7. Требования по эргономике и технической эстетике

Основными требованиями по эргономике и технической эстетике является адекватность времени реакции модулей системы на сложность запроса пользователя к базам данных:

- При выполнении стандартных запросов пользователь должен работать с системой в реальном режиме времени.

4.8. Требования к численности и квалификации персонала системы и режиму его работы

Для эксплуатации модуля ИС «Учет труда и отдыха» определены следующие роли:

- Системный администратор;

- Администратор баз данных;

- Администратор информационной безопасности;

- Пользователь (нарядчик).

Основными обязанностями системного администратора являются:

- Модернизация, настройка и мониторинг работоспособности комплекса технических средств (серверов, рабочих станций);

- Установка, модернизация, настройка и мониторинг работоспособности системного и базового программного обеспечения;

- Установка, настройка и мониторинг прикладного программного обеспечения;

- Ведение учетных записей пользователей системы.

Системный администратор должен обладать высоким уровнем квалификации и практическим опытом выполнения работ по установке, настройке и администрированию программных и технических средств, применяемых в системе.

Основными обязанностями администратора баз данных являются:

- Установка, модернизация, настройка параметров программного обеспечения СУБД;

- Оптимизация прикладных баз данных по времени отклика, скорости доступа к данным;

- Разработка, управление и реализация эффективной политики доступа к информации, хранящейся в прикладных базах данных.

Администратор баз данных должен обладать высоким уровнем квалификации и практическим опытом выполнения работ по установке, настройке и администрированию используемых в ИС СУБД.

Основными обязанностями администратора информационной безопасности являются:

- Разработка, управление и реализация эффективной политики информационной безопасности системы;

- Управление правами доступа пользователей к функциям системы;

- Осуществление мониторинга информационной безопасности.

Администратор информационной безопасности данных должен обладать высоким уровнем квалификации и практическим опытом выполнения работ по обеспечению информационной безопасности.

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

Роли системного администратора, администратора баз данных и администратора информационной безопасности могут быть совмещены в роль.

Рекомендуемая численность для эксплуатации модуля ИС «Учет труда и отдыха»:

- Администратор - 1 штатная единица;

- Пользователь (нарядчик) - число штатных единиц определяется структурой предприятия.

4.9. Требования к защите информации от несанкционированного доступа

Разрабатываемый модуль ИС должен обладать специализированной подсистемой разграничения доступа к информационным ресурсам, функционирующей на основе системы пользователей и пользовательских групп.

4.10. Требования к обмену данными

Обмен данными должен происходить по сети в среде Internet с поддержкой протокола TCP/IP;

Все компоненты модуля ИС должны функционировать в пределах единого логического пространства, обеспеченного интегрированными средствами серверов данных и серверов приложений.

4.11. Требования к внешней среде системы

Сервер баз данных или сервер приложений должен обеспечивать: возможность доступа к модулю ИС с любого клиентского места.

4.12. Требования к хранению данных

База данных «Графики» должна содержать следующие данные:

- Данные о локомотивных бригадах (ФИО, табельный номер, номер колонны);

- Данные о смене (день/ночь).

4.13. Требования к отдельным подсистемам

В состав модуля ИС “Учет труда и отдыха” должны входить следующие подсистемы:

- Подсистема хранения данных;

- Подсистема управления нормативно-справочной информацией;

- Подсистема анализа;

- Подсистема интеграции;

- Подсистема формирования отчетности;

Подсистема хранения данных предназначена для хранения оперативных данных системы, данных для формирования графиков, документов системы, сформированных в процессе работы с графиками.

Подсистема приложений операционного управления предназначена для учета работ с работниками локомотивных бригад, ввода информация о локомотивах, входящих в состав локомотивного эксплуатационного депо, их организационном делении и штатном расписании, автоматизации процедур управления графиком локомотивных бригад (ведение полной информации о бригадах, процедуры оценки работников, обучения и т.п.), обеспечение всего спектра работ нарядчиков, автоматическое формирование графиков, справок, учет рабочего времени.

Подсистема управления нормативно-справочной информацией предназначена для централизованного ведения классификаторов и справочников, используемых для обеспечения информационной совместимости подсистем.

Подсистема интеграции должна обеспечивать следующие основные виды взаимодействия со смежными системами:

прием запросов от смежных систем, обработку полученных запросов и предоставление ответов на запросы;

передачу запросов в смежные системы и обработку полученных ответов.

В ходе выполнения проекта должны быть разработаны форматы данных, протоколы и регламенты взаимодействия Системы со смежными системами.

Подсистема должна обеспечивать ведение журналов учета поступивших и обработанных запросов, посланных запросов и полученных ответов смежных систем.

Подсистема формирования отчетности предназначена для создания и формирования отчетов в виде удобном для вывода на печатающие устройства на основе данных ИС АРМ «Нарядчик», проектирования и разработки форм регламентированной отчетности, настройки планового формирования и доставки регламентированных отчетов, формирования и предоставления по запросам пользователей аналитических и статистических отчетов, отображения регламентированных отчетов с помощью веб-интерфейса, вывода подготовленных отчетных форм на печать.

Также модуль ИС «Учет труда и отдыха» должна обеспечивать доступ пользователей к операционным данным БД ИС (путем предоставления сервисов, позволяющих формировать запросы на получение информации ограниченного доступа, в соответствии с уровнем компетентности пользователя

Состав и содержание работ по созданию модуля

Разработать модель БД, позволяющую хранить и обрабатывать все необходимые данные.

Приемо-сдаточные испытания модуля

После завершения всех работ по разработке компонентов, настройке подсистем, модуль ИС должен подвергнутся испытаниям, которые осуществляются в локомотивном эксплуатационном депо г. Белово.

Внесение корректировок в программный продукт, связанных с ошибками в Системе

Все ошибки, которые будут выявлены в работе Системы в течении 2 недель устраняются разработчиком.

Тестирование

Перед сдачей Модулей и Компонент Заказчику для выявления возможных сбоев в работе модуль подвергается тестированию со стороны нарядчиков в течении 1 недели.

Порядок контроля и приемки Системы

Для проверки выполнения заданных функций Системы, определения и проверки соответствия требованиям ТЗ количественных и (или) качественных характеристик Системы, выявления и устранения недостатков в действиях Системы и в разработанной документации, поэтапного контроля над ходом разработки должны быть проведены следующие виды испытаний:

Испытание на рабочем месте нарядчика.

Процедуры тестирования и контроля качества

При проведении испытаний должны использоваться следующие типы процедур тестирования и контроля качества:

·функциональное тестирование - тестирование модуля ИС на соответствие функциональным спецификациям;

Общие требования к приемке работ

Сроки и место приемки, порядок приемки работ определяются в соответствии с настоящим ТЗ.

Требования к документированию

12.1. Требования к проектной документации

Состав и комплектность проектной документации должна соответствовать требованиям ГОСТ 34.201-89.

Приложение 3

Листинг программы

Файл grafik.aspx.cs

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Drawing; //для выбора цвета

using System.Web.Configuration; //для чтения из файла Web.Config

using System.Data; //Содержит объект DataSet

using MySql.Data; //Для работы с БД MySQL

using MySql.Data.MySqlClient;

using System; //для ссылки на цвета Color.Red к примеру

namespace WebApplication3

{

public partial class WebForm1 : System.Web.UI.Page

{

MySqlDataAdapter GrafikDA;

DataSet GrafikDS;

MySqlConnection conn;

string sql, sql2;

String CurIDGr; //текущее значение IDGr графика

int NormaHours; //норма часов для текущего месяца и года

float curHoursSum, curPrazdHours;

protected void Page_Load(object sender, EventArgs e)

{

int id = -1;

//Чтение строки подключения ServiceDBCon из файла Web.Config

SqlDataSource1.ConnectionString = WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString;

//Пытаемся считать значения IDGr из параметров URL веб-страницы

if (GridView1.Rows.Count > 0)

{

if (!IsPostBack)

{

if (Request.QueryString["id"] == null) GridView1.SelectedIndex = 0;

else

{

//Request.QueryString["id"] задан, поэтому выбираем строку

if (GridView1.SelectedIndex < 0) //если строка не выбрана

{

if (this.Request.QueryString["id"] != null)

{

id = Convert.ToInt32(this.Request.QueryString["id"]); //считываем номер IDGr для из параметра URL

}

//выбираем строку по id из параметра

for (int j = 0; j < GridView1.Rows.Count; j++)

{

if (GridView1.DataKeys[j].Value.Equals(id))

{

GridView1.SelectRow(j);

}

}

}

}

}

LoadGrafik();

}

}

protected void btn_Click(object sender, EventArgs e)

{

//Переход на страницу редактирования строки графика. Передаем параметр - идентификатор IDGrRow строки графика

//(sender as Button).Text - название кнопки созданной дианически для редактирования строки графика

//определяем IDGrRow по IDGr и GrafPos (берем из названия кнопки)

//Создаем соединение с БД

conn = new MySqlConnection(WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString);

conn.Open();

GrafikDS = new DataSet();

try

{

//Читаем строки графика

sql = "SELECT IDGrRow FROM grafikrows WHERE IDGraf=" + GridView1.SelectedDataKey.Value.ToString() + " AND GrafPos=" + (sender as Button).Text;

GrafikDA = new MySqlDataAdapter(sql, conn);

GrafikDA.Fill(GrafikDS, "grafikrows");

}

catch (Exception ex)

{

Label1.Text = "Не удалось определить номер строки в графике. " + ex.ToString();

Label1.Visible = true;

conn.Close();

return;

}

Response.Redirect("editrow.aspx?idgr=" + GrafikDS.Tables["grafikrows"].Rows[0]["IDGrRow"]);

}

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)

{

//Загружаем выделенный график

LoadGrafik();

}

protected void LoadGrafik()

{

//Загрузка таблицы графика

TableRow rowNew;

TableCell celNew;

int[] PrazdDays; //массив с праздничными днями выбранного года, месяца

float Value;

//предварительно очищаем таблицу

Table1.Rows.Clear();

//если строка не выбрана в GridView, то график не отрисовываем

if (GridView1.SelectedIndex < 0) return;

//если строка не выбрана, выходим из функции

if (GridView1.SelectedDataKey == null)

return;

else

CurIDGr = GridView1.SelectedDataKey.Values["IDGr"].ToString();

GrafikDS = new DataSet();

//Создаем соединение с БД

conn = new MySqlConnection(WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString);

conn.Open();

try

{

//Читаем строки графика

sql = "SELECT grafikrows.*, person.* FROM grafikrows LEFT OUTER JOIN person " +

"ON grafikrows.IDPerson = person.IDPerson WHERE grafikrows.IDGraf = " + CurIDGr + " ORDER BY grafikrows.GrafPos";

GrafikDA = new MySqlDataAdapter(sql, conn);

GrafikDA.Fill(GrafikDS, "grafikrows");

}

catch (Exception ex)

{

Label1.Text = ex.ToString();

Label1.Visible = true;

conn.Close();

return;

}

//Читаем норму часов для выбранного года и месяца

sql2 = "SELECT * FROM monthnorma WHERE NormYear = " + GridView1.SelectedRow.Cells[2].Text + " AND NormMonth = " + GridView1.SelectedRow.Cells[3].Text + " AND VidNormy=2";

GrafikDA = new MySqlDataAdapter(sql2, conn);

GrafikDA.Fill(GrafikDS, "monthnorma");

if (GrafikDS.Tables["monthnorma"].Rows.Count == 1)

{

NormaHours = Convert.ToInt32(GrafikDS.Tables["monthnorma"].Rows[0]["NormValue"].ToString());

}

else

{

NormaHours = 0;

}

//Определяем количество дней в выбранном месяце

Int32 m = Convert.ToInt32(GridView1.SelectedRow.Cells[3].Text); //месяц

Int32 y = 0;

try

{

y = Convert.ToInt32(GridView1.SelectedRow.Cells[2].Text); //год

}

catch

{

Label1.Text = "Введите число в поле Год";

return;

}

Int32 n = DateTime.DaysInMonth(y, m); //количество дней в выбранном месяце

//Читаем праздничные дни из БД для данного года и месяца. Помещаем их в массив

//Читаем норму часов для выбранного года и месяца с 1 по последнее число месяца

sql2 = "SELECT * FROM praznddays WHERE PrDate >='" + GridView1.SelectedRow.Cells[2].Text + "-" + GridView1.SelectedRow.Cells[3].Text + "-01' AND PrDate <='" + GridView1.SelectedRow.Cells[2].Text + "-" + GridView1.SelectedRow.Cells[3].Text + "-" + Convert.ToString(n) + "'";

GrafikDA = new MySqlDataAdapter(sql2, conn);

GrafikDA.Fill(GrafikDS, "praznddays");

if (GrafikDS.Tables["praznddays"].Rows.Count > 0)

{

//формируем массив с числами праздничных дней

PrazdDays = new int[GrafikDS.Tables["praznddays"].Rows.Count];

for (int i = 0; i < GrafikDS.Tables["praznddays"].Rows.Count; i++)

{

PrazdDays[i] = Convert.ToDateTime(GrafikDS.Tables["praznddays"].Rows[i]["PrDate"].ToString()).Day;

}

}

else

{

PrazdDays = null;

}

//Создаем Заголовок таблицы---------------------------------------------------------------------------

rowNew = new TableRow();

// 1. Кнопка

celNew = new TableCell();

celNew.Text = "Ред.";

celNew.HorizontalAlign = HorizontalAlign.Center;

rowNew.Cells.Add(celNew);

// 2. Номер смены

celNew = new TableCell();

celNew.Text = "Смена";

celNew.HorizontalAlign = HorizontalAlign.Center;

rowNew.Cells.Add(celNew);

//3. Должность

celNew = new TableCell();

celNew.Text = "Должность";

celNew.HorizontalAlign = HorizontalAlign.Center;

rowNew.Cells.Add(celNew);

//4. ФИО

celNew = new TableCell();

celNew.Text = "ФИО";

rowNew.Cells.Add(celNew);

celNew.HorizontalAlign = HorizontalAlign.Center;

//5. часы для каждого дня месяца

for (int j = 0; j < n; j++)

{

// создать новую ячейку

celNew = new TableCell();

celNew.Text = Convert.ToString(j + 1);

celNew.HorizontalAlign = HorizontalAlign.Center;

if (PrazdDays != null)

{

for (int k = 0; k < PrazdDays.Length; k++)

{

if (PrazdDays[k] == j + 1) celNew.BackColor = Color.Red;

}

}

// добавить ячейку к строке таблицы

rowNew.Cells.Add(celNew);

}

//6. Факт.часов

celNew = new TableCell();

celNew.Text = "Факт";

celNew.HorizontalAlign = HorizontalAlign.Center;

rowNew.Cells.Add(celNew);

//7. Празд.часов

celNew = new TableCell();

celNew.Text = "Празд";

celNew.HorizontalAlign = HorizontalAlign.Center;

rowNew.Cells.Add(celNew);

//8. Факт-Празд.часов

celNew = new TableCell();

celNew.Text = "Факт-Празд";

celNew.HorizontalAlign = HorizontalAlign.Center;

rowNew.Cells.Add(celNew);

//9. Факт-Празд.часов

celNew = new TableCell();

celNew.Text = "Норма";

celNew.HorizontalAlign = HorizontalAlign.Center;

rowNew.Cells.Add(celNew);

Table1.Rows.Add(rowNew);

// Заполняем основную таблицу---------------------------------------------------------------------------

for (int i = 0; i < 8; i++)

{

curHoursSum = 0; //текущая сумма фактических часов работы сотрудника

curPrazdHours = 0; //текущая сумма праздничных часов

// создать новую строку таблицы

rowNew = new TableRow();

//1. Кнопка для редактирования

celNew = new TableCell();

celNew.HorizontalAlign = HorizontalAlign.Center;

//Программно создаем кнопку в ячейке

Button btn = new Button();

btn.Text = Convert.ToString(i + 1);

btn.Click += new System.EventHandler(this.btn_Click); //Динамическая привязка метода Click кнопки к методу btn_Click

celNew.Controls.Add(btn);

//Назначаем кнопке метод

rowNew.Cells.Add(celNew);

//2. Номер смены

celNew = new TableCell();

if (Convert.ToInt32(GrafikDS.Tables["grafikrows"].Rows[i]["GrafPos"].ToString()) % 2 == 1)

celNew.Text = GrafikDS.Tables["grafikrows"].Rows[i]["Smena"].ToString();

else

celNew.Text = "";

rowNew.Cells.Add(celNew);

//3. Должность

celNew = new TableCell();

if (Convert.ToInt32(GrafikDS.Tables["grafikrows"].Rows[i]["GrafPos"].ToString()) % 2 == 1) celNew.Text = "маш-ст";

else celNew.Text = "п/м";

rowNew.Cells.Add(celNew);

//4. ФИО

celNew = new TableCell();

if (GrafikDS.Tables["grafikrows"].Rows[i]["IDPerson"].ToString() != "")

{

celNew.Text = GrafikDS.Tables["grafikrows"].Rows[i]["Lastname"].ToString() + " " + GrafikDS.Tables["grafikrows"].Rows[i]["Firstname"].ToString().Substring(0, 1) + "." + GrafikDS.Tables["grafikrows"].Rows[i]["FatherName"].ToString().Substring(0, 1) + ". (" + GrafikDS.Tables["grafikrows"].Rows[i]["Tabnom"].ToString() + ")";

}

rowNew.Cells.Add(celNew);

//читаем данные по часам по сотруднику в набор данных

//Читаем строки графика

sql2 = "SELECT * FROM grafikhours WHERE IDGrRow = " + GrafikDS.Tables["grafikrows"].Rows[i]["IDGrRow"].ToString() + " ORDER BY DayOfMonth";

GrafikDA = new MySqlDataAdapter(sql2, conn);

GrafikDA.Fill(GrafikDS, "grafikhours");

//5. часы для каждого дня месяца

int k = 0;

for (int j = 1; j <= n; j++)

{

// создать новую ячейку

celNew = new TableCell();

if (GrafikDS.Tables["grafikhours"].Rows.Count == 0)

{

// в БД для данной сторки графика данных нет, потому ставим там пробел

celNew.Text = " ";

}

else

{

if (j != Convert.ToInt32(GrafikDS.Tables["grafikhours"].Rows[k]["DayOfMonth"].ToString()))

{

//в БД нет данных по этому дню

celNew.Text = " ";

}

else

{

//в БД есть данные по дням. Пытаемся найти в таблице БД значение для j-го дня

celNew.Text = GrafikDS.Tables["grafikhours"].Rows[k]["GrVal"].ToString();

//добавляем значение часов к фактической сумме

if (GrafikDS.Tables["grafikhours"].Rows[k]["GrVal"].ToString() != "X")

{

if (float.TryParse(GrafikDS.Tables["grafikhours"].Rows[k]["GrVal"].ToString().Replace("/н", ""), out Value))

{

Label1.Visible = false;

curHoursSum += Value;

//также вычисляем праздничные часы по сотруднику

if (PrazdDays != null)

{

for (int t = 0; t < PrazdDays.Length; t++)

{

if (PrazdDays[t] == j) curPrazdHours += Value;

}

}

}

else //Присутствует буква.

{

Label1.Text = "В таблице графика есть значение часов не соотвествующее формату";

Label1.Visible = true;

}

}

if (k < GrafikDS.Tables["grafikhours"].Rows.Count - 1) k++;

}

}

// добавить ячейку к строке таблицы

rowNew.Cells.Add(celNew);

}

//очищаем таблицу

GrafikDS.Tables["grafikhours"].Clear();

//6. Факт.часов

celNew = new TableCell();

celNew.Text = Convert.ToString(curHoursSum);

rowNew.Cells.Add(celNew);

//7. Празд.часов

celNew = new TableCell();

celNew.Text = Convert.ToString(curPrazdHours);

rowNew.Cells.Add(celNew);

//8. Факт-Празд.часов

celNew = new TableCell();

celNew.Text = Convert.ToString(curHoursSum - curPrazdHours);

rowNew.Cells.Add(celNew);

//9. Факт-Празд.часов

celNew = new TableCell();

if (NormaHours > 0) celNew.Text = Convert.ToString(NormaHours);

rowNew.Cells.Add(celNew);

// добавить строку к таблице

Table1.Rows.Add(rowNew);

}

}

protected void Button1_Click(object sender, EventArgs e)

{

ViewState["SeltdID"] = GridView1.SelectedIndex;

//Переход на страницу добавления графика

Response.Redirect("graf_add.aspx");

}

protected void Button3_Click(object sender, EventArgs e)

{

//Вызываем метод удаления графика

SqlDataSource1.Delete();

}

protected void Button2_Click(object sender, EventArgs e)

{

ViewState["SeltdID"] = GridView1.SelectedIndex;

//Переход на страницу редактирования графика. Передаем один параметр - идентификатор IDGr графика

Response.Redirect("graf_edt.aspx?id=" + GridView1.SelectedDataKey.Value.ToString());

}

protected void GridView1_Sorted(object sender, EventArgs e)

{

//предварительно очищаем таблицу

Table1.Rows.Clear();

Label1.Text = "Выберите график в списке";

Label1.Visible = true;

}

protected void GridView1_PageIndexChanged(object sender, EventArgs e)

{

//предварительно очищаем таблицу

Table1.Rows.Clear();

Label1.Text = "Выберите график в списке";

Label1.Visible = true;

}

}

}

Файл graf_edt.aspx.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.Configuration; //для чтения из файла Web.Config

using System.Data; //Содержит объект DataSet

using MySql.Data; //Для работы с БД MySQL

using MySql.Data.MySqlClient;

namespace WebApplication3

{

public partial class WebForm5 : System.Web.UI.Page

{

MySqlDataAdapter GrafikDA;

DataSet GrafikDS;

MySqlConnection conn;

String CurIDGr; //значение текущего вновь добавленного в БД графика

String CurSmena, CurGrafPos;

protected void Page_Load(object sender, EventArgs e)

{

SqlDataSource1.ConnectionString = WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString;

SqlDataSourceMonths.ConnectionString = WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString;

VidWorkSqlDataSource.ConnectionString = WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString;

SqlDataSourceLokom.ConnectionString = WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString;

if (!IsPostBack)

{

//считываем значения IDGr из параметра URL страницы

CurIDGr = Request.QueryString["id"];

//Из БД считываем значения графика

conn = new MySqlConnection(WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString);

conn.Open();

String sql = "SELECT * FROM grafik WHERE IDGr=" + CurIDGr;

GrafikDS = new DataSet();

GrafikDA = new MySqlDataAdapter(sql, conn);

GrafikDA.Fill(GrafikDS, "grafik");

if (GrafikDS.Tables["grafik"].Rows.Count > 0)

{

//ID

TextBox1.Text = CurIDGr;

//год

TextBox2.Text = GrafikDS.Tables["grafik"].Rows[0]["GrYear"].ToString();

//месяц

DropDownList1.SelectedValue = GrafikDS.Tables["grafik"].Rows[0]["GrMonth"].ToString();

//вид работ

DropDownList2.SelectedValue = GrafikDS.Tables["grafik"].Rows[0]["IDVidWork"].ToString();

//локомотив

DropDownList3.SelectedValue = GrafikDS.Tables["grafik"].Rows[0]["IDLokomotiv"].ToString();

//начало работы

TextBox3.Text = GrafikDS.Tables["grafik"].Rows[0]["BeginWork"].ToString();

}

}

}

protected void Button1_Click(object sender, EventArgs e)

{

String sql;

//Предварительно проверяем, может уже есть такой график в БД

//Создаем соединение с БД

conn = new MySqlConnection(WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString);

conn.Open();

try

{

//Читаем данные графика из БД

sql = "SELECT * FROM grafik WHERE IDGr=" + TextBox1.Text;

GrafikDS = new DataSet();

GrafikDA = new MySqlDataAdapter(sql, conn);

GrafikDA.Fill(GrafikDS, "grafik");

}

catch (Exception ex)

{

Label1.Text = ex.ToString();

Label1.Visible = true;

conn.Close();

return;

}

if (GrafikDS.Tables["grafik"].Rows.Count == 0)

{

// Такой график уже есть в БД, добавление невозможно

Label1.Text = "График не найден в БД";

Label1.Visible = true;

}

else

{

// график найден в БД

Label1.Visible = false;

//Вызываем метод Update у SqlDataSource1

//В его свойстве UpdateQuery определен запрос Update с привязкой параметров

//к элементам управления. Параметры задаются в событии SqlDataSource1.Updating

SqlDataSource1.Update();

//Возвращаемся к графику c IDGr=CurIDGr

Response.Redirect("grafik.aspx?id=" + TextBox1.Text);

}

}

protected void Button2_Click(object sender, EventArgs e)

{

//Возвращаемся к графику c IDGr=CurIDGr

Response.Redirect("grafik.aspx?id=" + TextBox1.Text);

}

}

}

Файл graf_add.aspx.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.Configuration; //для чтения из файла Web.Config

using System.Data; //Содержит объект DataSet

using MySql.Data; //Для работы с БД MySQL

using MySql.Data.MySqlClient;

namespace WebApplication3

{

public partial class WebForm3 : System.Web.UI.Page

{

MySqlDataAdapter GrafikDA;

DataSet GrafikDS;

MySqlConnection conn;

String CurIDGr; //значение текущего вновь добавленного в БД графика

String CurSmena, CurGrafPos;

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

//В поле Год помещаем значение текущего года

TextBox1.Text = DateTime.Now.Year.ToString();

}

SqlDataSource1.ConnectionString = WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString;

SqlDataSource2.ConnectionString = WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString;

VidWorkSqlDataSource.ConnectionString = WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString;

SqlDataSourceLokom.ConnectionString = WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString;

}

protected void Button1_Click(object sender, EventArgs e)

{

String sql;

//Предварительно проверяем, может уже есть такой график в БД

//Создаем соединение с БД

conn = new MySqlConnection(WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString);

conn.Open();

try

{

//Читаем запись графика из БД

sql = "SELECT * FROM grafik WHERE GrYear=" + TextBox1.Text + " AND GrMonth=" +

DropDownList2.SelectedValue.ToString() + " AND IDVidWork=" + DropDownList1.SelectedValue.ToString() +

" AND IDLokomotiv=" + DropDownList3.SelectedValue.ToString() +

" AND BeginWork='" + TextBox2.Text + "'";

GrafikDS = new DataSet();

GrafikDA = new MySqlDataAdapter(sql, conn);

GrafikDA.Fill(GrafikDS, "grafik");

}

catch (Exception ex)

{

Label1.Text = ex.ToString();

Label1.Visible = true;

conn.Close();

return;

}

if (GrafikDS.Tables["grafik"].Rows.Count > 0)

{

// Такой график уже есть в БД, добавление невозможно

Label1.Text = "Такой график уже есть в БД, добавление невозможно";

Label1.Visible = true;

}

else

{

// Такого графика в БД нет. Добавление графика в БД

Label1.Visible = false;

//Вызываем метод Insert у SqlDataSource1

//В его свойстве InsertQuery определен запрос Insert с привязкой параметров

//к элементам управления

SqlDataSource1.Insert();

//Ещё раз выбираем из БД добавленный график, чтобы определить его IDGr

GrafikDA.Fill(GrafikDS, "grafik");

if (GrafikDS.Tables["grafik"].Rows.Count > 0)

{

CurIDGr = GrafikDS.Tables["grafik"].Rows[0]["IDGr"].ToString();

//Для вновь созданного графика создаем строки в таблице grafikrows

for (int i = 0; i < 8; i++)

{

CurGrafPos = Convert.ToString(i + 1);

CurSmena = Convert.ToString((i / 2) + 1);

//Вызываем метод Insert у SqlDataSource2

//В его свойстве InsertQuery определен запрос Insert.

// Параметры определяются в событии SqlDataSource2_Inserting

SqlDataSource2.Insert();

}

//Переход на главную страницу

Response.Redirect("grafik.aspx");

}

else

{

Label1.Text = "Ошибка. График не найден!";

Label1.Visible = true;

}

}

}

protected void SqlDataSource2_Inserting(object sender, SqlDataSourceCommandEventArgs e)

{

//Перед вызовом запроса на вставку программно меняем значение параметра

e.Command.Parameters["IDGraf"].Value = CurIDGr;

e.Command.Parameters["GrafPos"].Value = CurGrafPos;

e.Command.Parameters["Smena"].Value = CurSmena;

}

protected void Button2_Click(object sender, EventArgs e)

{

//Переход на главную страницу

Response.Redirect("grafik.aspx");

}

}

}

Файл editrow.aspx.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.Configuration; //для чтения из файла Web.Config

using System.Data; //Содержит объект DataSet

using MySql.Data; //Для работы с БД MySQL

using MySql.Data.MySqlClient;

using System.Drawing;

namespace WebApplication3

{

public partial class WebForm2 : System.Web.UI.Page

{

String CurIDGr;

String CurIDGrRow;

String CurIDGRH;

int CurDay;

String CurVal;

MySqlDataAdapter GrafikDA, GrafikDA2;

DataSet GrafikDS;

MySqlConnection conn;

protected void Page_Load(object sender, EventArgs e)

{

Label1.Visible = false;

SqlDataSource1.ConnectionString = WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString;

//считываем значения IDGr и IDGrRow из параметров URL веб-страницы

CurIDGrRow = Request.QueryString["idgr"];

//Из БД считываем значения графика

conn = new MySqlConnection(WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString);

conn.Open();

GrafikDS = new DataSet();

//считываем данные ряда графика

String sql = "SELECT grafikrows.IDGrRow, grafikrows.IDGraf, grafikrows.GrafPos, grafikrows.Smena, grafikrows.IDPerson," +

" person.LastName, person.FirstName, person.FatherName, person.Tabnom FROM grafikrows LEFT OUTER JOIN person" +

" ON grafikrows.IDPerson = person.IDPerson WHERE grafikrows.IDGrRow=" + CurIDGrRow;

GrafikDA2 = new MySqlDataAdapter(sql, conn);

GrafikDA2.Fill(GrafikDS, "grafikrows");

if (GrafikDS.Tables["grafikrows"].Rows.Count > 0)

{

CurIDGr = GrafikDS.Tables["grafikrows"].Rows[0]["IDGraf"].ToString();

//№ строки в графике

Table2.Rows[0].Cells[1].Text = GrafikDS.Tables["grafikrows"].Rows[0]["GrafPos"].ToString();

//смена

Table2.Rows[1].Cells[1].Text = GrafikDS.Tables["grafikrows"].Rows[0]["Smena"].ToString();

//должность

if (Convert.ToInt32(GrafikDS.Tables["grafikrows"].Rows[0]["GrafPos"]) % 2 == 1)

Table2.Rows[2].Cells[1].Text = "маш-ст";

else

Table2.Rows[2].Cells[1].Text = "п/м";

if (GrafikDS.Tables["grafikrows"].Rows[0]["IDPerson"].ToString()!="")

{

//ФИО (таб. №)

Table2.Rows[3].Cells[1].Text = GrafikDS.Tables["grafikrows"].Rows[0]["Lastname"].ToString() + " " + GrafikDS.Tables["grafikrows"].Rows[0]["Firstname"].ToString().Substring(0, 1) + "." + GrafikDS.Tables["grafikrows"].Rows[0]["FatherName"].ToString().Substring(0, 1) + ". (" + GrafikDS.Tables["grafikrows"].Rows[0]["Tabnom"].ToString() + ")";

}

}

//считываем данные графика

sql = "SELECT * FROM grafik LEFT OUTER JOIN vidwork ON grafik.IDVidWork = vidwork.IDVidWork" +

" LEFT OUTER JOIN months ON grafik.GrMonth = months.MonthNum LEFT OUTER JOIN lokomotiv" +

" ON grafik.IDLokomotiv = lokomotiv.LokID WHERE grafik.IDGr=" + CurIDGr;

GrafikDA = new MySqlDataAdapter(sql, conn);

GrafikDA.Fill(GrafikDS, "grafik");

if (GrafikDS.Tables["grafik"].Rows.Count > 0)

{

//ID

Table1.Rows[0].Cells[1].Text = CurIDGr;

//год

Table1.Rows[1].Cells[1].Text = GrafikDS.Tables["grafik"].Rows[0]["GrYear"].ToString();

//месяц

Table1.Rows[2].Cells[1].Text = GrafikDS.Tables["grafik"].Rows[0]["MonthNameRu"].ToString();

//вид работ

Table1.Rows[3].Cells[1].Text = GrafikDS.Tables["grafik"].Rows[0]["NameVidWork"].ToString();

//локомотив

Table1.Rows[4].Cells[1].Text = GrafikDS.Tables["grafik"].Rows[0]["FullName"].ToString();

//начало работы

Table1.Rows[5].Cells[1].Text = GrafikDS.Tables["grafik"].Rows[0]["BeginWork"].ToString();

}

//Определяем количество дней в выбранном месяце

Int32 n = 0;

try

{

n = DateTime.DaysInMonth(Convert.ToInt32(GrafikDS.Tables["grafik"].Rows[0]["GrYear"]), Convert.ToInt32(GrafikDS.Tables["grafik"].Rows[0]["GrMonth"])); //количество дней в выбранном месяце

}

catch

{

Label1.Text = "Ошибка при вычислении количества дней в месяце";

Label1.Visible = false;

//return;

}

//Заполняем таблицу Table3 с данными за месяц

Table3.Rows.Clear();

//считываем часовые данные ряда графика

sql = "SELECT * FROM grafikhours WHERE IDGrRow=" + GrafikDS.Tables["grafikrows"].Rows[0]["IDGrRow"].ToString() + " ORDER BY DayOfMonth";

GrafikDA = new MySqlDataAdapter(sql, conn);

GrafikDA.Fill(GrafikDS, "grafikhours");

TableRow rowNew1, rowNew2;

TableCell celNew;

TextBox txtBox;

String str1;

float Value;

int k = 0;

//Два ряда создаем

rowNew1 = new TableRow(); //для номеров дней

rowNew2 = new TableRow(); //для значений часов работы

for (int i = 0; i < n; i++) //для каждого числа месяца

{

// верхний ряд - день месяца

celNew = new TableCell();

celNew.Text = Convert.ToString(i + 1);

celNew.HorizontalAlign = HorizontalAlign.Center;

rowNew1.Cells.Add(celNew);

// нижний ряд - значение

celNew = new TableCell();

if (GrafikDS.Tables["grafikhours"].Rows.Count == 0)

{

// в БД для данной строки графика данных нет, потому ставим пустую строку

str1 = "";

}

else

{

//в БД есть значение для этого дня

if ((i+1) != Convert.ToInt32(GrafikDS.Tables["grafikhours"].Rows[k]["DayOfMonth"].ToString()))

{

//в БД нет данных по этому дню

str1 = "";

}

else

{

//в БД есть данные по дням. Пытаемся найти в таблице БД значение для j-го дня

str1 = GrafikDS.Tables["grafikhours"].Rows[k]["GrVal"].ToString();

//проверка введенного значения на соответсвие формату

if (str1 != "Х")

{

if (float.TryParse(GrafikDS.Tables["grafikhours"].Rows[k]["GrVal"].ToString().Replace("/н", ""), out Value))

{

Label1.Visible = false;

}

else //Присутствует буква.

{

str1 = "";

Label1.Text = "Значение часов работы не соотвествует формату";

Label1.Visible = true;

}

}

if (k < GrafikDS.Tables["grafikhours"].Rows.Count - 1) k++;

}

}

//добавляем текстовое поле в ячейку со значением отработанных часов

txtBox = new TextBox();

txtBox.Text = str1;

txtBox.Width = 30;

txtBox.BackColor = Color.Cyan;

txtBox.ID = "txtBox" + (i+1);

txtBox.AutoPostBack = true;

txtBox.TextChanged += new System.EventHandler(this.txtBox_TextChanged); //определяем обработчик события

celNew.Controls.Add(txtBox);

celNew.HorizontalAlign = HorizontalAlign.Center;

rowNew2.Cells.Add(celNew);

}

//добавляем сформированные ряды в таблицу

Table3.Rows.Add(rowNew1);

Table3.Rows.Add(rowNew2);

}

protected void Button3_Click(object sender, EventArgs e)

{

//Переход на страницу выбора сотрудника

Response.Redirect("persget.aspx?idgr=" + CurIDGrRow);

}

protected void Button1_Click(object sender, EventArgs e)

{

//Нажатие кнопки Применить. Сохраняем изменения. Возвращаемся к графику c IDGr=CurIDGr

Response.Redirect("grafik.aspx?id=" + CurIDGr);

}

protected void txtBox_TextChanged(object sender, EventArgs e)

{

String sql;

//Обработчик изменения значения часов в таблице

if ((sender as TextBox).ID.Substring(0, 6) == "txtBox")

{

//Извлекаем из ID TextBox-а, число, а также берем его значение

CurDay = Convert.ToInt32(((sender as TextBox).ID.Substring(6)));

CurVal = (sender as TextBox).Text.Trim().ToUpper();

//приводим обозначения к единому формату

CurVal = CurVal.Replace("X", "Х"); //замена английской буквы на русскую

CurVal = CurVal.Replace("/Н", "/н"); //меняем большую Н на маленькую

(sender as TextBox).Text = CurVal;

//Проверяем наличие записи в БД

try

{

conn = new MySqlConnection(WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString);

conn.Open();

GrafikDS = new DataSet();

//Читаем значение из БД

sql = "SELECT * FROM grafikhours WHERE IDGrRow=" + CurIDGrRow + " AND DayOfMonth=" + CurDay;

GrafikDA = new MySqlDataAdapter(sql, conn);

GrafikDA.Fill(GrafikDS, "grafikhours");

}

catch (Exception ex)

{

Label1.Text = "Ошибка при записи данных в БД. " + ex.ToString();

Label1.Visible = true;

conn.Close();

return;

}

if (GrafikDS.Tables["grafikhours"].Rows.Count == 0)

{

//И значение часов не пустое

if (CurVal != "")

{

//Записи нет, поэтому добавляем ее в БД

SqlDataSource1.Insert();

}

}

else

{

//Запись есть

//новое значение пустое. поэтому удаляем его в БД

if (CurVal == "")

{

CurIDGRH = GrafikDS.Tables["grafikhours"].Rows[0]["IDGRH"].ToString();

SqlDataSource1.Delete();

}

else

{

//новое значение не пустое, поэтому обновляем её в БД

CurIDGRH = GrafikDS.Tables["grafikhours"].Rows[0]["IDGRH"].ToString();

SqlDataSource1.Update();

}

}

}

}

protected void SqlDataSource1_Inserting(object sender, SqlDataSourceCommandEventArgs e)

{

//Перед вызовом запроса на вставку программно меняем значение параметра

e.Command.Parameters["IDGrRow"].Value = CurIDGrRow;

e.Command.Parameters["DayOfMonth"].Value = CurDay;

e.Command.Parameters["GrVal"].Value = CurVal;

}

protected void SqlDataSource1_Updating(object sender, SqlDataSourceCommandEventArgs e)

{

e.Command.Parameters["IDGRH"].Value = CurIDGRH;

e.Command.Parameters["GrVal"].Value = CurVal;

}

}

}

Файл persget.aspx.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.Configuration; //для чтения из файла Web.Config

using System.Data; //Содержит объект DataSet

using MySql.Data; //Для работы с БД MySQL

using MySql.Data.MySqlClient;

namespace WebApplication3

{

public partial class WebForm4 : System.Web.UI.Page

{

String CurIDGrRow;

protected void Page_Load(object sender, EventArgs e)

{

CurIDGrRow = Request.QueryString["idgr"];

SqlDataSource1.ConnectionString = WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString;

SqlDataSource2.ConnectionString = WebConfigurationManager.ConnectionStrings["GrafikiDBCon"].ConnectionString;

}

protected void Button1_Click(object sender, EventArgs e)

{

int val;

if (int.TryParse(TextBox1.Text, out val))

{

//В качестве фильтра задано число - табельный номер

SqlDataSource1.FilterExpression = "Tabnom=" + TextBox1.Text;

}

else

{

//В качестве фильтра задана строка - фамилия

SqlDataSource1.FilterExpression = "LastName like '" + TextBox1.Text + "%'";

}

}

protected void Button3_Click(object sender, EventArgs e)

{

Response.Redirect("persget.aspx?idgr=" + CurIDGrRow);

}

protected void Button2_Click(object sender, EventArgs e)

{

//Вызываем метод обновления для изменения сотрудника в строке графика

//Параметры и их связь с ЭУ заданы внутри свойства UpdateQuery

SqlDataSource2.Update();

//Переход на страницу выбора сотрудника

Response.Redirect("editrow.aspx?idgr=" + CurIDGrRow);

}

protected void SqlDataSource2_Updating(object sender, SqlDataSourceCommandEventArgs e)

{

//Перед вызовом запроса на обновление программно меняем значение параметра

e.Command.Parameters["IDGrRow"].Value = CurIDGrRow;

}

}

}

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.