Опубликован: 11.09.2006 | Доступ: свободный | Студентов: 7648 / 473 | Оценка: 4.26 / 3.45 | Длительность: 30:46:00
ISBN: 978-5-9556-0080-2
Лекция 11:

Финальный проект — программа education center

< Лекция 10 || Лекция 11: 1234567891011

Форма frmClient

Форма frmClient, используемая для добавления новых клиентов, содержит ряд вкладок. Располагаем элементы управления и называем их в соответствии с рис. 11.35–11.38.

Вкладка "Данные клиента"

Рис. 11.35. Вкладка "Данные клиента"
Вкладка "Оплата и реализация"

Рис. 11.36. Вкладка "Оплата и реализация"
Вкладка "Архив"

Рис. 11.37. Вкладка "Архив"
Вкладка "Группы клиента"

Рис. 11.38. Вкладка "Группы клиента"

Листинг frmClient:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using Manager.Forms;

namespace Manager
{
	public class frmClient : System.Windows.Forms.Form
	{
// Объявление элементов управления
		internal DataRow BindingRow
		{
			get { return bindingRow; }
			set { bindingRow = value; }
		}

		private int groupID = 0;
		internal int GroupID
		{
			get { return groupID; }
			set { groupID = value; }
		}

		private int clientID = 0;
		internal int ClientID
		{
			get { return clientID; }
			set { clientID = value; }
		}

		private frmManager mainForm = null;
		private Manager.Forms.MainDataSet mainDataSet1;
	
		internal frmManager MainForm 
		{
			get { return mainForm; }
			set { mainForm = value; }
		}

		internal CurrencyManager cmPaymentType;

		private MainDataSet mainDataSet = null;
		public frmClient(MainDataSet mainDataSet)
		{
			InitializeComponent();

			this.mainDataSet = mainDataSet;
			dgPayments.Tag = "Payments";
			dgClientsRealization.Tag = "Realization";
			Size labelSize = new Size(this.Width, lblClientID.Size.Height); 
			this.lblClientID.Size = labelSize;

			mainDataSet.income.Columns["clientID"].DefaultValue = this.ClientID;
			mainDataSet.RealizedTable.Columns["clientID"].DefaultValue = this.ClientID;

			DesigneDataGrids();
			btnCreateClientPayment.Click += new EventHandler(btnCreateClientPayment_Click);
			btnRealizeClient.Click += new EventHandler(btnRealizeClient_Click);
			cmbPaymentType.DataSource = mainDataSet.payment_type;
			cmbPaymentType.DisplayMember = "payment_typeName";
			cmPaymentType = (CurrencyManager)this.BindingContext[mainDataSet, "payment_type"];
			cmPaymentType.Position = 0;
			
			//*****************************
			btnFindClient.Click += new EventHandler(btnFindClient_Click);
			btnSelectClient.Click += new EventHandler(btnSelectClient_Click);
			dgFindedClients.MouseUp += new MouseEventHandler(dgFindedClients_MouseUp);
			dgPayments.MouseUp += new MouseEventHandler(dgPayments_MouseUp);
			dgClientsRealization.MouseUp += new MouseEventHandler(dgPayments_MouseUp);
			//*****************************
		}

		public frmClient(DataRow bindingRow, MainDataSet mainDataSet)
		{
			InitializeComponent();

			this.mainDataSet = mainDataSet;
			dgPayments.Tag = "Payments";
			dgClientsRealization.Tag = "Realization";

			IsCreating = true;
			Size labelSize = new Size(this.Width, lblClientID.Size.Height); 
			this.lblClientID.Size = labelSize;

			this.bindingRow = bindingRow;
			this.ClientID = (int)bindingRow["clientID"];

			this.lblClientID.Text += this.ClientID.ToString();
			this.txtFirstName.Text = bindingRow["fname"].ToString();
			this.txtLastName.Text = bindingRow["lname"].ToString();
			this.txtFatherName.Text = bindingRow["fathName"].ToString();
			this.txtPhones.Text = bindingRow["linkData"].ToString();
			this.dtpRecordDate.Value = (DateTime)bindingRow["recordDate"];
			this.txtNotes.Text = bindingRow["note"].ToString();
			mainDataSet.income.Columns["clientID"].DefaultValue = this.ClientID;
			mainDataSet.RealizedTable.Columns["clientID"].DefaultValue = this.ClientID;

			btnCreateClientPayment.Click += new EventHandler(btnCreateClientPayment_Click);
			btnRealizeClient.Click += new EventHandler(btnRealizeClient_Click);
			DesigneDataGrids();

			cmbPaymentType.DataSource = mainDataSet.payment_type;
			cmbPaymentType.DisplayMember = "payment_typeName";
			cmPaymentType = (CurrencyManager)this.BindingContext[mainDataSet, "payment_type"];
			cmPaymentType.Position = 0;

			//**********************
			btnFindClient.Click += new EventHandler(btnFindClient_Click);
			btnSelectClient.Click += new EventHandler(btnSelectClient_Click);
			dgFindedClients.MouseUp += new MouseEventHandler(dgFindedClients_MouseUp);
			dgPayments.MouseUp += new MouseEventHandler(dgPayments_MouseUp);
			dgClientsRealization.MouseUp += new MouseEventHandler(dgPayments_MouseUp);
			//**********************
		}

		protected override void Dispose( bool disposing )
		{
// Описание метода
		}

		private void InitializeComponent()
		{
			// Описание метода
		}

		private void txtLastName_Validated(object sender, System.EventArgs e)
		{
			if (IsCreating)
				if (txtLastName.Text != this.bindingRow["lname"].ToString())
				{
					this.bindingRow["lname"] = txtLastName.Text;
				}
		}

		private void txtFirstName_Validated(object sender, System.EventArgs e)
		{
			if (IsCreating)
				if (txtFirstName.Text != this.bindingRow["fname"].ToString())
				{
					this.bindingRow["fname"] = txtFirstName.Text;
				}
		}

		private void txtFartherName_Validated(object sender, System.EventArgs e)
		{
			if (IsCreating)
				if (txtFatherName.Text != this.bindingRow["fathName"].ToString())
				{
					this.bindingRow["fathName"] = txtFatherName.Text;
				}
		}

		private void txtPhones_Validated(object sender, System.EventArgs e)
		{
			if (IsCreating)
				if (txtPhones.Text != this.bindingRow["linkData"].ToString())
				{
					this.bindingRow["linkData"] = txtPhones.Text;
				}
		}

		private void dtpRecordDate_Validated(object sender, System.EventArgs e)
		{
			if (IsCreating)
				if (dtpRecordDate.Value != (DateTime)this.bindingRow["recorddate"])
				{
					this.bindingRow["recorddate"] = dtpRecordDate.Value;
				}
		}

		private void txtNotes_Validated(object sender, System.EventArgs e)
		{
			if (IsCreating)
				if (txtNotes.Text != this.bindingRow["note"].ToString())
				{
					this.bindingRow["note"] = txtNotes.Text;
				}
		}

		// Реализация  клиента
		private void btnRealizeClient_Click(object sender, System.EventArgs e)
		{
			try
			{
				DataRow realizedRow = mainDataSet.RealizedTable.NewRow();

				realizedRow["realizedSumm"] = double.Parse(txtRealizedSumm.Text);
				realizedRow["realizingDate"] = dtpRealizedDate.Value;
				realizedRow["note"] = txtRealizingNotes.Text;
				realizedRow["clientID"] = clientID;

				mainDataSet.RealizedTable.Rows.Add(realizedRow);
			}
			catch (Exception ex)
			{
				MessageBox.Show(ex.Message, ex.Source);
			}
		}

		private void frmClient_Activated(object sender, System.EventArgs e)
		{
			txtLastName.Focus();
		}

		private void btnCalculate_Click(object sender, System.EventArgs e)
		{
			try
			{
				DataView dvIncome = (DataView)dgPayments.DataSource;

				double incomeSumm = 0;
				foreach (DataRowView drvIncome in dvIncome)
				{
					incomeSumm += (double)drvIncome.Row["summa"];
				}

				txtIncomeSumm.Text = incomeSumm.ToString("C");
				
				DataView dvRealized = (DataView)dgClientsRealization.DataSource;

				double realizedSumm = 0;
				foreach (DataRowView drvRealized in dvRealized)
				{
					realizedSumm += (double)drvRealized.Row["realizedSumm"];
				}

				txtRealizationSumm.Text = realizedSumm.ToString("C");
			}
			catch (Exception ex)
			{
				MessageBox.Show(ex.Message, ex.Source);
			}
		}

		private void DesigneDataGrids()
		{
			// Стиль таблицы оплат клиента 
			DataGridTableStyle incomeTableStyle = new DataGridTableStyle();
			incomeTableStyle.MappingName = "income";

			DataGridTextBoxColumn summaStyle = new DataGridTextBoxColumn();
			summaStyle.MappingName = "summa";
			summaStyle.Width = 100;
			summaStyle.Format = "#.0";
			summaStyle.HeaderText = "Сумма";

			DataGridTextBoxColumn payment_typeIDStyle = new DataGridTextBoxColumn();
			payment_typeIDStyle.MappingName = "payment_typeID";
			payment_typeIDStyle.Width = 100;
			payment_typeIDStyle.HeaderText = "Код вида оплаты";
			
			DataGridTextBoxColumn noteStyle = new DataGridTextBoxColumn();
			noteStyle.MappingName = "note";
			noteStyle.Width = 100;
			noteStyle.HeaderText = "Заметки";

			DataGridBoolColumn realizedStyle = new DataGridBoolColumn();
			realizedStyle.MappingName = "IsRealized";
			realizedStyle.Width = 100;
			realizedStyle.HeaderText = "Реализовано";

			incomeTableStyle.GridColumnStyles.AddRange(new DataGridColumnStyle[] {
																					 summaStyle,
																					 payment_typeIDStyle,
																					 noteStyle});

			dgPayments.TableStyles.Add(incomeTableStyle);

			// Стиль таблицы реализации оплат клиента 
			DataGridTableStyle PlanRealizationTableStyle = new DataGridTableStyle();
			PlanRealizationTableStyle.MappingName = "PlanRealization";

			DataGridTextBoxColumn SummaRealizationStyle = new DataGridTextBoxColumn();
			SummaRealizationStyle.MappingName = "SummaRealization";
			SummaRealizationStyle.Width = 150;
			SummaRealizationStyle.Format = "#.0";
			SummaRealizationStyle.HeaderText = "Сумма реализации";

			DataGridTextBoxColumn DateRealizationStyle = new DataGridTextBoxColumn();
			DateRealizationStyle.MappingName = "DateRealization";
			DateRealizationStyle.Width = 100;			
			DateRealizationStyle.HeaderText = "Дата реализации";
			
			DataGridTextBoxColumn noteRealizationStyle = new DataGridTextBoxColumn();
			noteRealizationStyle.MappingName = "Cause";
			noteRealizationStyle.Width = 100;
			noteRealizationStyle.HeaderText = "Заметки";

			PlanRealizationTableStyle.GridColumnStyles.AddRange(new DataGridTextBoxColumn[] {
																								SummaRealizationStyle,
																								DateRealizationStyle,
																								noteRealizationStyle});

			dgPayments.TableStyles.Add(PlanRealizationTableStyle);

			// Стиль таблицы фактической реализации оплат клиента 
			DataGridTableStyle RealizedTableStyle = new DataGridTableStyle();
			RealizedTableStyle.MappingName = "RealizedTable";

			DataGridTextBoxColumn RealizationSummStyle = new DataGridTextBoxColumn();
			RealizationSummStyle.MappingName = "realizedSumm";
			RealizationSummStyle.Width = 150;
			RealizationSummStyle.HeaderText = "Сумма";

			DataGridTextBoxColumn RealizingDateStyle = new DataGridTextBoxColumn();
			RealizingDateStyle.MappingName = "realizingDate";
			RealizingDateStyle.Width = 150;
			RealizingDateStyle.Format = "dd-MMMM-yyyy";
			RealizingDateStyle.HeaderText = "Дата реализации";

			DataGridTextBoxColumn NoteRealizationStyle = new DataGridTextBoxColumn();
			NoteRealizationStyle.MappingName = "note";
			NoteRealizationStyle.Width = 100;			
			NoteRealizationStyle.HeaderText = "Заметки";

			RealizedTableStyle.GridColumnStyles.AddRange(new DataGridTextBoxColumn[] {
																						 RealizationSummStyle, 
																						 RealizingDateStyle,
																						 NoteRealizationStyle});

			dgClientsRealization.TableStyles.Add(RealizedTableStyle);
		}

		private void btnCreateClientPayment_Click(object sender, System.EventArgs e)
		{
			try
			{
				DataRow incomeRow = mainDataSet.income.NewRow();

				incomeRow["dataID"] = frmManager.DataID;
				incomeRow["clientID"] = this.clientID;
				incomeRow["summa"] = double.Parse(txtIncomeClientSumm.Text);
				incomeRow["note"] = txtIncomeNote.Text;
				incomeRow["IsRealized"] = 0;
				DataRowView payment_typeRowView = (DataRowView)cmPaymentType.Current;
				incomeRow["payment_typeID"] = payment_typeRowView.Row["payment_typeID"];
				///
				///Добавление  столбца с датой ввода суммы (по умолчанию равной текущей дате)
				///
				mainDataSet.income.Rows.Add(incomeRow);
			}
			catch (Exception ex)
			{
				MessageBox.Show(ex.Message, ex.Source);
			}
		}

		//**************************
		private void FilterClients()
		{
			string clientLastName = txtLastName.Text;
			string clientFirstName = txtFirstName.Text;
			string clientFatherName = txtFatherName.Text;

			DataView dataView = new DataView(mainDataSet.clients);
			string filter = "fname = \'" + clientFirstName + "\' OR lname = \'" + clientLastName + "\' OR fathName = \'" + clientFatherName + "\'";
			dataView.RowFilter = filter;

			dgFindedClients.DataSource = dataView;
		}

		private int GetClientIDInSearchDataGrid(DataGrid.HitTestInfo hti)
		{
			if (hti.Row == -1)
				return -1;

			DataView searchDataView = (DataView)dgFindedClients.DataSource;
			return (int)searchDataView[hti.Row].Row["clientID"];
		}

		private void PasteSelectedClient()
		{
			try
			{
				if (selectedClientIDInDataGrid == -1)
				{
					MessageBox.Show("Не выбран клиент!");
					return;
				}

				DataRow groupClientsRow = mainDataSet.group_clients.NewRow();

				groupClientsRow["groupID"] = this.GroupID;
				groupClientsRow["clientID"] = selectedClientIDInDataGrid;
				groupClientsRow["IsPaid"] = false;
	
				mainDataSet.group_clients.Rows.Add(groupClientsRow);
				if (this.MainForm != null)
					MainForm.dgGroups_Click(MainForm.dgGroups, new EventArgs());
				
				this.Close();
			}
			catch (Exception ex)
			{
				MessageBox.Show(ex.Message, ex.Source);
			}
		}

		private void btnFindClient_Click(object sender, EventArgs e)
		{
			this.FilterClients();
		}
		
		private void btnSelectClient_Click(object sender, EventArgs e)
		{
			this.PasteSelectedClient();
		}

		int selectedClientIDInDataGrid = -1;
		//**************************

		private void dgFindedClients_MouseUp(object sender, MouseEventArgs e)
		{
			selectedClientIDInDataGrid = this.GetClientIDInSearchDataGrid(dgFindedClients.HitTest(e.X, e.Y));
		}

		private void dgPayments_MouseUp(object sender, MouseEventArgs e)
		{
			DataGrid dataGrid = (DataGrid)sender;
			DataGrid.HitTestInfo hti = dataGrid.HitTest(new Point(e.X, e.Y));
			
			if ((hti.Row < 0) || (hti.Column < 0))
				return;
			
			this.ShowDate(dataGrid, hti);
		}

		private void ShowDate(DataGrid dataGrid, DataGrid.HitTestInfo hti)
		{
			string caption = dataGrid.Tag.ToString();
			dataGrid.CaptionText = "";
			DataView dataView = (DataView)dataGrid.DataSource;
			DataRow row = null;
			
			row = (DataRow)dataView[hti.Row].Row;

			DateTime date;
			DataRow mainRow = null;
			if (dataGrid.Tag.ToString() == "Payments")
			{
				mainRow = row.GetParentRow("dataincome");

				if (mainRow == null)
					return;

				date = (DateTime)mainRow["currentDate"];
			}
			else if (dataGrid.Tag.ToString() == "Realization")
			{
				mainRow = row;

				if (mainRow == null)
					return;

				date = (DateTime)mainRow["DateRealization"];
			}
			else 
				return;

			string textFormat = String.Format(" - Date: {0}", date.ToString("dd MMMM yyyy"));
			caption += textFormat;
			dataGrid.CaptionText = caption;
		}
	}
}
Листинг 11.7.
< Лекция 10 || Лекция 11: 1234567891011
Елена Дьяконова
Елена Дьяконова

При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка: 

Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll

Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "lblResult" не из того потока, в котором он был создан.

Затем:

Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll

Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз.

Александр Сороколет
Александр Сороколет

Свойство WindowState формы blank Maximized. Не открывается почемуто на всё окно, а вот если последующую форму бланк открыть уже на макс открывается :-/