|
При нажатии на Сумма в примере ArbitraryMethod из Лекция 7, VS 2013 выдается ошибка: Необработанное исключение типа "System.InvalidOperationException" в System.Windows.Forms.dll Дополнительные сведения: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления "lblResult" не из того потока, в котором он был создан. Затем: Необработанное исключение типа "System.InvalidOperationException" в mscorlib.dll Дополнительные сведения: Для каждой асинхронной операции метод EndInvoke может вызываться только один раз. |
Опубликован: 11.09.2006 | Уровень: специалист | Доступ: платный
Лекция 11:
Финальный проект — программа education center
Форма frmClient
Форма frmClient, используемая для добавления новых клиентов, содержит ряд вкладок. Располагаем элементы управления и называем их в соответствии с рис. 11.35–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.




