При нажатии на Сумма в примере 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.