RUS_-_Karejev_-_Razrabotka_Windows-prilozhenij
.pdfprivate TreeNode selectedNode; private string selectedNodeName = ""; private TreeNodeType treeNodeType; private TreeNode MainTreeNode = null;
private DirectionTreeNode[] dtns = null;
private Color itemColor;
private bool ItemCanMove = false;
private CustomListItem selectedItem; // Выбранный заголовок item на элементе ListView проводника
private CurrencyManager currManagerIncome; private CurrencyManager currManagerOut;
private CurrencyManager currManagerPaymentType; private CurrencyManager currManagerTotal;
internal frmAuthorization.UserGroup userGroup;
private bool SelectingClient = false; // Переменная, отвечающая за возможность выбора клиента
CurrencyManager cmClientsTable; CurrencyManager cmGroupsTable; TreeNode oldGroupNode;
static private int dataID = 0; static internal int DataID
{
get { return dataID; }
}
Листинг 11.1.
Добавим в класс формы frmManager методы, указываемые в таблице 11.17.
Таблица 11.17. Методы формы frmManager
Сигнатура методов |
Описание методов |
private void LoadCoursesDataGrid(int directionID) |
Загрузка объекта DataGrid списком курсов |
private void InitDefaultSettings() |
Восстановление настроек по умолчанию |
internal void CheckEmployeesBirthDays() |
Проверка наличия дней рождения |
internal void PasteDateRow() |
Вставка новой записи текущей даты в таблицу. data, |
|
если таковой не существует |
private void SetAllowDBNullForMainDataSet() |
Разрешение null-значений для таблиц |
internal void FillPaymentsPage() |
Загрузка страницы оплат |
private void AddNewClient() |
Добавление нового клиента |
private void AddNewGroup() |
Добавление новой группы из проводника |
private void AddNewGroupWaitingRoom() |
Добавление новой группы со страницы "Приемная" |
private void AddNewCourse() |
Добавление нового курса |
private void AddNewDirection() |
Добавление нового направления |
internal void Explorer() |
Заполнение метода данными из главной БД |
private void FillListView(TreeNodeType treeNodeType, TreeNode |
Заполнение элемента ListView данными узла дерева |
treeNode) |
|
private void TransferClients(TreeNode oldGroup, TreeNode newGroup) |
Перевод выбранных клиентов из одной группы в |
|
другую |
private void SearchClient() |
Поиск клиентов |
private void OpenEmployees() |
Форма сотрудников |
private void InsertToDataGrid(DataTable table) |
Заполнение элемента DataGrid на странице "Основные |
|
таблицы" |
internal void LoadMainDataBase() |
Загрузка главной БД |
private void UpdateMainData() |
Обновление главной БД |
private void ChangeStatus(ListView.SelectedListViewItemCollection |
Изменение статуса группы из проводника |
items, StatusType status) |
|
private void CalculateTotalPage(DataRow currentTotalRow) |
Итоговые расчеты на текущую запись в таблице data |
private void OpenItemInForm(TreeNodeType treeNodeType) |
Открывание заголовка item в элементе ListView |
private void AddNewClientWaitingRoom() |
Добавление нового клиента со страницы "Приемная" |
private void SetWitdhForDataGrids() |
Установка размера окон — используется при |
|
изменении размера окон |
private void DesigneDataGrids() |
Установка дизайна элементов DataGrid |
private double ClientIncomeSumm(int clientID) |
Сумма прихода клиента |
private double ClientRealizedSumm(int clientID) |
Реализованная сумма клиента |
private void GetOweStatistic() |
Вычисление должников — метод требуется для |
|
страницы "Статистика" |
private void RemoveTempFindControl() |
Удаление временных контролов поиска со страницы |
|
"Приемная" |
private DataRow GetTablesRow(DataTable table, int rowIndex, |
Создание новой или отображение существующей |
CurrencyManager currManager) |
записи таблицы на вкладке "Приемная" |
Листинг формы frmManager: |
|
using System; |
|
using System.Drawing; |
|
using System.Data; |
|
using System.Data.SqlTypes; |
|
using System.Collections; using System.ComponentModel; using System.Windows.Forms;
using System.Windows.Forms.Design; using System.Globalization;
using System.Text; using System.IO;
using System.Runtime.Serialization.Formatters.Binary; using System.Runtime.InteropServices;
using System.Reflection; using Manager.Forms; using System.Threading;
namespace Manager
{
internal class frmManager : System.Windows.Forms.Form
{
//Элементы управления
#region Константы
const int Delta = 10; // Смещение заголовка item по оси Х вправо относительно курсора
#endregion
#region Глобальные переменные
#region Путь к БД
private string MainConnectionString = "Data Source=EducationCenter.mdb;Provider=Microsoft.Jet.OLEDB.4.0;persist security info=False;User ID=admin";
#endregion
#region Глобальные поля
private int currentDataID;
private TreeNode selectedNode; private string selectedNodeName = ""; private TreeNodeType treeNodeType; private TreeNode MainTreeNode = null;
private DirectionTreeNode[] dtns = null;
private Color itemColor;
private CustomListItem selectedItem; // Выбранный заголовок item на элементе ListView в проводнике.
private CurrencyManager currManagerIncome; private CurrencyManager currManagerOut;
private CurrencyManager currManagerPaymentType; private CurrencyManager currManagerTotal;
internal frmAuthorization.UserGroup userGroup;
private bool SelectingClient = false; // Переменная, определяющая возможность выбора клиента
CurrencyManager cmClientsTable;
CurrencyManager cmGroupsTable;
TreeNode oldGroupNode;
#endregion |
|
#region Глобальные свойства |
|
static private int dataID = 0; |
|
static internal int DataID |
|
{ |
|
get { return dataID; } |
|
} |
|
#endregion |
|
#endregion |
|
#region Конструкторы |
|
// Главный конструктор |
|
internal frmManager() |
|
{ |
|
try |
|
{ |
|
InitializeComponent(); |
|
this.DesigneDataGrids(); |
// Дизайн таблиц в элементах datagrid. |
this.InitDefaultSettings(); |
// Устанавка значений по умолчанию. |
this.SetAllowDBNullForMainDataSet(); // Дополнительный метод для mainDataSet-a this.CheckEmployeesBirthDays();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, ex.Source);
}
}
#endregion
#region Перечисления
///<summary>
///Это перечисление содержит константы типов узлов в главном дереве
///</summary>
internal enum TreeNodeType
{
Top,
Direction,
Course, Group
}
///<summary>
///Это перечисление содержит константы статусов группы
///</summary>
internal enum StatusType
{
Filling = 1,
Learning = 2,
Finished = 3
}
#endregion
#region Структуры
///<summary>
///Item в DataGrid
///</summary>
public struct DataGridItem
{
private string text;
public string Text
{
get { return text; } set { text = value; }
}
internal DataGridItem(string text)
{
this.text = text;
}
}
#endregion
#region Мои методы
#region Windows Form Designer generated code private void InitializeComponent()
{
// Описание метода
}
#endregion
// Загружаем список курсов в объект DataGrid private void LoadCoursesDataGrid(int directionID)
{
try
{
DataView dvCourses = new DataView(mainDataSet.course); dvCourses.RowFilter = "directionID = " + directionID.ToString();
dgCourses.DataSource = dvCourses;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, ex.Source);
}
}
// Устанавливаем настройки по умолчанию private void InitDefaultSettings()
{
// Значения по умолчанию в главных таблицах mainDataSet.PlanRealization.Columns["IsRealized"].DefaultValue = false; mainDataSet.PlanRealization.Columns["SummaPlan"].DefaultValue = 0; mainDataSet.PlanRealization.Columns["SummaRealization"].DefaultValue = 0; mainDataSet.PlanRealization.Columns["Cause"].DefaultValue = "";
mainDataSet.income.Columns["IsRealized"].DefaultValue |
= false; |
mainDataSet.income.Columns["payment_typeID"].DefaultValue = 1; |
|
mainDataSet.income.Columns["clientID"].DefaultValue = |
1; |
mainDataSet.income.Columns["summa"].DefaultValue = 0; |
|
mainDataSet.expenses.Columns["payment_typeID"].DefaultValue = 1;
mainDataSet.expenses.Columns["clientID"].DefaultValue |
= 1; |
mainDataSet.expenses.Columns["employeeID"].DefaultValue = 1; |
|
mainDataSet.data.Columns["amountYesterday"].DefaultValue = 0; mainDataSet.data.Columns["amountToday"].DefaultValue = 0; mainDataSet.data.Columns["incomeToday"].DefaultValue = 0; mainDataSet.data.Columns["expanseToday"].DefaultValue = 0;
//Добавляем временную колонку EmployeeName в таблицу Employees для отображения
//на форме группы
DataColumn employeeName = new DataColumn("EmployeeName"); employeeName.Expression = "LastName + \' \' + FirstName"; employeeName.DataType = typeof(string); mainDataSet.employees.Columns.Add(employeeName);
mainDataSet.groups.Columns["beginDate"].DefaultValue = DateTime.Now.Date; mainDataSet.groups.Columns["endDate"].DefaultValue = DateTime.Now.Date; mainDataSet.groups.Columns["beginTime"].DefaultValue = DateTime.Now.Date; mainDataSet.groups.Columns["endTime"].DefaultValue = DateTime.Now.Date;
mainDataSet.clients.Columns["isRinged"].DefaultValue = false;
// Обработчики для главной формы this.WindowState = FormWindowState.Maximized;
this.Resize += new EventHandler(frmManager_Resize); this.Closed += new EventHandler(frmManager_Closed); this.Load += new EventHandler(frmManager_Load); this.Resize += new EventHandler(frmManager_Resize);
//Устанавливаем размеры окон — метод используется,
//когда изменяются размеры окон this.SetWitdhForDataGrids();
//Другие настройки *************************
miList.Checked = true;
lvManager.Activation = ItemActivation.OneClick;
string date = "dd MMMM yyyy, dddd"; lblDateTime.Text = DateTime.Now.Date.ToString(date);
hpManager.SetShowHelp(this, true);
//******************************************
//Связываем объекты CurrencyManager c таблицами
currManagerIncome = (CurrencyManager)this.BindingContext[mainDataSet, "data.dataincome"]; currManagerOut = (CurrencyManager)this.BindingContext[mainDataSet, "data.dataexpenses"]; currManagerPaymentType = (CurrencyManager)this.BindingContext[mainDataSet, "payment_type"];
//Обработчики событий CheckedChanged для RadioButton-ов,
//отображающих таблицы главной БД
rbClients.CheckedChanged += new EventHandler(rbClients_CheckedChanged); rbCourses.CheckedChanged += new EventHandler(rbClients_CheckedChanged); rbDataMain.CheckedChanged += new EventHandler(rbClients_CheckedChanged); rbDirections.CheckedChanged += new EventHandler(rbClients_CheckedChanged); rbEmployees.CheckedChanged += new EventHandler(rbClients_CheckedChanged); rbGroupClientsMain.CheckedChanged += new EventHandler(rbClients_CheckedChanged); rbGroups.CheckedChanged += new EventHandler(rbClients_CheckedChanged); rbIncomeMain.CheckedChanged += new EventHandler(rbClients_CheckedChanged); rbOutMain.CheckedChanged += new EventHandler(rbClients_CheckedChanged); rbPaymentTypeMain.CheckedChanged += new EventHandler(rbClients_CheckedChanged); rbRealizedTableMain.CheckedChanged += new EventHandler(rbClients_CheckedChanged); rbStatusMain.CheckedChanged += new EventHandler(rbClients_CheckedChanged);
// Обработчики событий элементов управления. dgCourses.Click += new EventHandler(dgCourses_Click); dgGroups.Click += new EventHandler(dgGroups_Click);
dgClients.MouseUp += new MouseEventHandler(dgClients_MouseUp); dgIncome.MouseUp += new MouseEventHandler(dgIncome_MouseUp); dgOut.MouseUp += new MouseEventHandler(dgIncome_MouseUp);
btnCreateClient.Click += new EventHandler(btnCreateClient_Click); btnCalculateOwe.Click += new EventHandler(btnCalculateOwe_Click); btnFindPasteClient.Click += new EventHandler(btnFindPasteClient_Click); btnShowGroups.Click += new EventHandler(btnShowGroups_Click); btnShowPaymentTypeForm.Click += new EventHandler(btnShowPaymentTypeForm_Click); btnNextDate.Click += new EventHandler(btnNextDate_Click);
btnPrevDate.Click += new EventHandler(btnPrevDate_Click); btnDeleteClient.Click += new EventHandler(btnDeleteClient_Click); btnDeleteGroup.Click += new EventHandler(btnDeleteGroup_Click);
cmbFilteringDirection.SelectionChangeCommitted+=new EventHandler(cmbFilteringDirection_SelectionChangeCommitted);
cmiFindIncomeOutClient.Click+= new EventHandler(cmiFindIncomeOutClient_Click); tbMain.ButtonClick += new ToolBarButtonClickEventHandler(tbMain_ButtonClick); miChangePassword.Click += new EventHandler(miChangePassword_Click);
// Настройки и инициализация главной БД
mainDataSet.PlanRealization.RowChanged += new DataRowChangeEventHandler(PlanRealization_RowChanged); mainDataSet.income.RowChanged += new DataRowChangeEventHandler(income_RowChanged);
dgGroups.DataSource = null;
}
// Проверка дней рождения
internal void CheckEmployeesBirthDays()
{
try
{
DateTime nowDate = DateTime.Now.Date; ArrayList employees = new ArrayList();
bool flag = false;
foreach (DataRow employeeRow in mainDataSet.employees.Rows)
{
if (employeeRow.IsNull("birthDay")) continue;
DateTime emplBirthDay = (DateTime)employeeRow["birthDay"];
bool isBirthDay = ((emplBirthDay.Month == nowDate.Month) && (emplBirthDay.Day == nowDate.Day)); if (isBirthDay)
{
string emplName = String.Format("{0} {1}.", employeeRow["LastName"].ToString(), employeeRow["FirstName"].ToString());
employees.Add(emplName);
flag = true;
}
}
if (flag)
{
BirthDayControl.BirthDay birth = new BirthDayControl.BirthDay(employees);
this.Controls.Add(birth);
birth.Location = new Point(this.Width / 2, this.Height / 2); birth.BringToFront();
birth.Show();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, ex.Source);
}
}
// Вставка новой записи текущей даты в таблицу data, если таковой не существует internal void PasteDateRow()
{
try
{
string nowDate = DateTime.Now.Date.ToString("dd MMMM yyyy");
foreach (DataRow totalRow in mainDataSet.data.Rows)
{
DateTime dt = (DateTime)totalRow["currentDate"]; if (dt.Date.ToString("dd MMMM yyyy") == nowDate)
{
dataID = (int)totalRow["dataID"]; currentDataID = dataID;
return;
}
}
//Добавляем запись текущего времени в главную таблицу data, с учетом,
//что в data может не быть записи
DataRow newDataRow = mainDataSet.data.NewRow();
newDataRow["currentDate"] = nowDate; newDataRow["incomeToday"] = 0; newDataRow["expanseToday"] = 0; newDataRow["note"] = ""; mainDataSet.data.Rows.Add(newDataRow);
DataRow lastRow = null;
if (mainDataSet.data.Rows.Count != 0)
{
lastRow = mainDataSet.data.Rows[mainDataSet.data.Rows.Count - 1];
newDataRow["amountYesterday"] = (decimal)lastRow["amountToday"];
DataRow lastDataRow = mainDataSet.data.Rows[mainDataSet.data.Rows.Count - 1]; int lastDataID = (int)lastDataRow["dataID"];
dataID = lastDataID;
mainDataSet.income.Columns["dataID"].DefaultValue = lastDataID;
mainDataSet.expenses.Columns["dataID"].DefaultValue = lastDataID;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, ex.Source);
}
}
// Разрешение null-значений для таблиц private void SetAllowDBNullForMainDataSet()
{
try
{
//Разрешение null-значений для таблицы group mainDataSet.groups.Columns["beginDate"].AllowDBNull = true; mainDataSet.groups.Columns["endDate"].AllowDBNull = true; mainDataSet.groups.Columns["beginTime"].AllowDBNull = true; mainDataSet.groups.Columns["endTime"].AllowDBNull = true; mainDataSet.groups.Columns["clientsCount"].AllowDBNull = true; mainDataSet.groups.Columns["classNumber"].AllowDBNull = true; mainDataSet.groups.Columns["courseID"].AllowDBNull = true; mainDataSet.groups.Columns["employeeID"].AllowDBNull = true; mainDataSet.groups.Columns["StatusID"].AllowDBNull = true; mainDataSet.groups.Columns["note"].AllowDBNull = true;
//Разрешение null-значений для таблицы group
mainDataSet.clients.Columns["recorddate"].AllowDBNull |
= true; |
//Разрешение null-значений для таблицы course mainDataSet.course.Columns["priceNumber"].AllowDBNull = true;
//Разрешение null-значений для таблицы employees mainDataSet.employees.Columns["birthDay"].AllowDBNull = true;
//Разрешение null-значений для таблицы GroupClients mainDataSet.group_clients.Columns["IsPaid"].AllowDBNull = true;
//Разрешение null-значений для таблицы income mainDataSet.income.Columns["IsRealized"].AllowDBNull = true; mainDataSet.income.Columns["Payment_TypeID"].AllowDBNull = true;
//Разрешение null-значений для таблицы PlanRealization
mainDataSet.PlanRealization.Columns["IsRealized"].AllowDBNull = true; mainDataSet.PlanRealization.Columns["DateRealization"].AllowDBNull = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, ex.Source);
}
}
// Загружаем страницу оплат internal void FillPaymentsPage()
{
try
{
dgIncome.DataSource = mainDataSet; dgIncome.DataMember = "data.dataincome";
dgOut.DataSource = mainDataSet; dgOut.DataMember = "data.dataexpenses";
currManagerTotal = (CurrencyManager)this.BindingContext[mainDataSet, "data"]; txtYesterdaySumm.DataBindings.Add("Text", mainDataSet, "data.amountYesterday"); txtResultCount.DataBindings.Add("Text", mainDataSet, "data.amountToday"); currManagerTotal.Position = mainDataSet.data.Rows.Count - 1;
DataView dvTotal = new DataView(mainDataSet.data);
int prevDataID = 0; int lastDataID = 0;
lastDataID = (int)mainDataSet.data.Rows[mainDataSet.data.Rows.Count - 1]["dataID"];
if (mainDataSet.data.Rows.Count - 2 != -1)
prevDataID = (int)mainDataSet.data.Rows[mainDataSet.data.Rows.Count - 2]["dataID"]; else
prevDataID = lastDataID;
dvTotal.RowFilter = "dataID >= " + prevDataID.ToString() + " AND dataID <= " + lastDataID.ToString(); dgMainTable.DataSource = dvTotal;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, ex.Source);
}
}
// Добавляем нового клиента private void AddNewClient()
{
frmClient f = new frmClient(this.mainDataSet);
f.lblClientID.Text = "Новый клиент";
f.Text += selectedNodeName;
MainDataSet.groupsRow group = (MainDataSet.groupsRow)selectedNode.Tag; f.GroupID = (int)group["groupID"];
f.tpClientGroups.Hide();
if (f.ShowDialog() == DialogResult.OK)
{
try
{
// Добавляем данные в табл. clients
DataRow newClientRow = mainDataSet.clients.NewRow();
newClientRow["fname"] |
= f.txtFirstName.Text; |
newClientRow["lname"] |
= f.txtLastName.Text; |
newClientRow["fathName"] |
= f.txtFatherName.Text; |
newClientRow["linkData"] |
= f.txtPhones.Text; |
newClientRow["recorddate"] = f.dtpRecordDate.Value; |
|
newClientRow["note"] |
= f.txtNotes.Text; |
mainDataSet.clients.Rows.Add(newClientRow);
// Добавляем данные в табл. Group_Clients
DataRow newGroupClientRow = mainDataSet.group_clients.NewRow(); DataRow selectedGroup = (DataRow)selectedNode.Tag;
int clientID = (int)newClientRow[0];
newGroupClientRow["clientID"] |
= |
clientID; |
newGroupClientRow["groupID"] |
= |
(int)selectedGroup[0]; |
mainDataSet.group_clients.Rows.Add(newGroupClientRow); selectedGroup["clientsCount"] = lvManager.Items.Count + 1;
// Добавляем данные в табл. income
DataView dvIncome = new DataView(mainDataSet.income); dvIncome.RowFilter = "clientID = " + clientID.ToString();
if (dvIncome == null)
{
DataRow newIncomeRow = mainDataSet.income.NewRow(); newIncomeRow["ClientID"] = clientID; newIncomeRow["dataID"] = DataID;
newIncomeRow["IsRealized"] = 0; mainDataSet.income.Rows.Add(newIncomeRow);
}
// Refresh ListView this.FillListView(treeNodeType, selectedNode);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, ex.Source);
}
}
}
// Добавляем новую группу из проводника private void AddNewGroup()
{
MainDataSet.groupsRow newGroup = (MainDataSet.groupsRow)mainDataSet.groups.NewRow(); frmGroup f = new frmGroup(mainDataSet);
f.Text += selectedNodeName; f.lblGroupID.Text = "Новая группа";
if (f.ShowDialog() == DialogResult.OK)
{
try
{
DataRow courseRow = (DataRow)selectedNode.Tag; int courseID = (int)courseRow["courseID"];
string stringBeginDate = f.dtpBeginDate.Value.ToString("dd MMMM yyyy");
newGroup["beginDate"] |
= DateTime.Parse(stringBeginDate); |
string stringEndDate |
= f.dtpEndDate.Value.ToString("dd MMMM yyyy"); |
newGroup["endDate"] |
= DateTime.Parse(stringEndDate); |
string stringBeginTime = f.dtpBeginTime.Value.ToString("HH:mm"); |
|
newGroup["beginTime"] |
= DateTime.Parse(stringBeginTime); |
string stringEndTime |
= f.dtpEndTime.Value.ToString("HH:mm"); |
newGroup["endTime"] |
= DateTime.Parse(stringEndTime); |
newGroup["classNumber"] |
= int.Parse(f.cmbClassNumber.Text); |
newGroup["clientsCount"] = 0; |
|
newGroup["courseID"] |
= courseID; |
DataRowView employeeRowView = (DataRowView)f.cmEmployees.Current; |
|
newGroup["employeeID"] |
= (int)employeeRowView.Row["employeeID"]; |
newGroup["note"] |
= f.txtNotes.Text; |
int statusID = (int)mainDataSet.GroupStatus.Rows[f.cmbEmployee.SelectedIndex]["StatusID"]; newGroup["StatusID"] = statusID;
mainDataSet.groups.AddgroupsRow(newGroup);
GroupTreeNode gtn = new GroupTreeNode(); gtn.Tag = newGroup;
gtn.Text = newGroup["groupID"].ToString(); gtn.ImageIndex = 6;
if (statusID == 1) // Группа набирается
{
gtn.ForeColor = Color.Red;
}
else if (statusID == 2) // Группа обучается
{
gtn.ForeColor = Color.Green;
}
else if (statusID == 3) // Группа закончила обучение
{
gtn.ForeColor = Color.Blue;
}
selectedNode.Nodes.Add(gtn);
this.FillListView(treeNodeType, selectedNode);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, ex.Source);
}
}
}
// Добавляем новую группу со страницы 'Приемная' private void AddNewGroupWaitingRoom()
{
try
{
MainDataSet.groupsRow newGroup = (MainDataSet.groupsRow)mainDataSet.groups.NewRow(); frmGroup f = new frmGroup(mainDataSet);
int courseRowID = dgCourses.CurrentRowIndex; DataView dvCourses = (DataView)dgCourses.DataSource; DataRow course = dvCourses[courseRowID].Row; f.cmbEmployee.DataSource = mainDataSet.employees;
f.cmbEmployee.DisplayMember = mainDataSet.employees.LastNameColumn.ToString(); f.Text += course["courseName"].ToString();
f.lblGroupID.Text = "Новая группа";
if (f.ShowDialog() == DialogResult.OK)
{
try
{
int courseID = (int)course[0];
newGroup["beginDate"] = f.dtpBeginDate.Value; newGroup["endDate"] = f.dtpEndDate.Value; newGroup["beginTime"] = f.dtpBeginTime.Value; newGroup["endTime"] = f.dtpEndTime.Value; newGroup["classNumber"] = int.Parse(f.cmbClassNumber.Text); newGroup["clientsCount"] = 0;
newGroup["courseID"] = courseID;
DataRowView employeeRowView = (DataRowView)f.cmEmployees.Current; newGroup["employeeID"] = (int)employeeRowView.Row["employeeID"]; newGroup["note"] = f.txtNotes.Text;
int statusID = (int)mainDataSet.GroupStatus.Rows[f.cmbStatus.SelectedIndex][0]; newGroup["StatusID"] = statusID;
mainDataSet.groups.AddgroupsRow(newGroup);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, ex.Source);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, ex.Source);
}
}
// Добавляем новый курс private void AddNewCourse()
{
frmCourse f = new frmCourse();
DataRow newCourse = mainDataSet.course.NewRow(); int newCourseID = (int)newCourse["courseID"];
f.Text += selectedNodeName; f.lblCourseNumber.Text += newCourseID.ToString();
if (f.ShowDialog() == DialogResult.OK)
{
try
{
DataRow directionRow = (DataRow)selectedNode.Tag; int directionID = (int)directionRow[0];
newCourse["courseName"] = f.txtCourseName.Text; newCourse["priceNumber"] = decimal.Parse(f.txtCoursePrice.Text); newCourse["directionID"] = directionID;
mainDataSet.course.Rows.Add(newCourse);
CourseTreeNode ctn = new CourseTreeNode(); ctn.Tag = newCourse;
ctn.Text = newCourse[1].ToString(); ctn.ImageIndex = 10;
ctn.ForeColor = Color.Green;
selectedNode.Nodes.Add(ctn);
this.FillListView(treeNodeType, selectedNode);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, ex.Source);
}
}
}
// Добавляем новое направление private void AddNewDirection()
{
frmDirection f = new frmDirection();
if (f.ShowDialog() == DialogResult.OK)
{
try
{
DataRow newDirection = mainDataSet.directions.NewRow(); newDirection["directName"] = f.txtDirectionName.Text; newDirection["note"] = f.txtDirectionNote.Text;
mainDataSet.directions.Rows.Add(newDirection);
DirectionTreeNode dtn = new DirectionTreeNode();
dtn.Tag = newDirection;
dtn.Text = newDirection["directName"].ToString(); dtn.ImageIndex = 11;
dtn.ForeColor = Color.RoyalBlue;
selectedNode.Nodes.Add(dtn);
this.FillListView(treeNodeType, selectedNode);
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, ex.Source);
}
}
}
///<summary>
///Этот метод заполняет дерево данными из главной БД
///</summary>
internal void Explorer()
{
try
{
tvManager.Sorted = true; tvManager.Nodes.Clear(); lvManager.Items.Clear();
// Вершина TreeView
MainTreeNode = new TreeNode("Учебный центр");
tvManager.Nodes.Add(MainTreeNode); tvManager.Nodes[0].ImageIndex = 0; tvManager.Nodes[0].ForeColor = Color.Blue;
dtns = new DirectionTreeNode[mainDataSet.directions.Rows.Count]; DirectionTreeNode dtn = null;
for (int k = 0; k < mainDataSet.directions.Rows.Count; k++)
{
//Добавляем направление с дочерними узлами dtn = new DirectionTreeNode();
dtn.NDDataSet = this.mainDataSet;
dtn.DirectionID = (int)mainDataSet.directions.Rows[k]["directionID"]; dtn.DirectionName = dtn.Text = mainDataSet.directions.Rows[k]["directName"].ToString(); dtn.DirectionNote = mainDataSet.directions.Rows[k]["note"].ToString();
dtn.ImageIndex = 11; dtn.ForeColor = Color.RoyalBlue;
dtn.GetChilds();
dtn.Tag = mainDataSet.directions.Rows[k];
dtns[k] = dtn; dtn = null;
}
MainTreeNode.Nodes.AddRange(dtns);
MainTreeNode.Expand();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, ex.Source);
}
}
// Заполняем ListView данными узла дерева
private void FillListView(TreeNodeType treeNodeType, TreeNode treeNode)
{
try
{
int imageIndexListView = 11; TreeNode tempTreeNode = null; lvManager.Columns.Clear();
DataRow selectedDirection = null;
DataRow selectedCourse = null;
DataRow selectedGroup = null;
switch (treeNodeType)
{
case TreeNodeType.Top:
// В ListView находятся направления tempTreeNode = treeNode; imageIndexListView = 11;
break;
case TreeNodeType.Direction:
// В ListView находятся курсы
DirectionTreeNode dtn = new DirectionTreeNode();
dtn.NDDataSet = this.mainDataSet; selectedDirection = (DataRow)selectedNode.Tag;
dtn.DirectionID = (int)selectedDirection["directionID"]; dtn.GetChilds();
tempTreeNode = treeNode; imageIndexListView = 10; break;
case TreeNodeType.Course:
// В ListView находятся группы
CourseTreeNode ctn = new CourseTreeNode();
ctn.NDDataSet = this.mainDataSet; selectedCourse = (DataRow)selectedNode.Tag; ctn.CourseID = (int)selectedCourse["courseID"]; ctn.GetChilds();
tempTreeNode = treeNode; imageIndexListView = 6; break;
case TreeNodeType.Group:
// В ListView находятся клиенты
GroupTreeNode gtn= new GroupTreeNode();
gtn.NDDataSet = this.mainDataSet; selectedGroup = (DataRow)selectedNode.Tag; gtn.GroupID = (int)selectedGroup["groupID"]; gtn.GetChilds();
tempTreeNode = gtn; imageIndexListView = 7; break;
}
lvManager.Items.Clear(); string str = "";
