Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
5 / 5 / 5
Регистрация: 17.12.2013
Сообщений: 202
1

Возникает исключение

26.09.2015, 15:00. Показов 435. Ответов 4
Метки нет (Все метки)

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

Форма 1
Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
 public partial class MainForm : Form
    {
        public DateTime date_deleting_from;
        public int table;
        public MainForm()
        {
            InitializeComponent();
            fillcombo();
            dgv_yearmonthaggregation.Visible = false;
            pb_vs.Visible = true;
            groupBox2.Visible = false;
        }
        public void fillcombo()
        {
            this.cb_tabselection.Items.Add("Начислено Posting (76)");
            this.cb_tabselection.Items.Add("Поступления Payments (36)");
            this.cb_tabselection.Text = "Начислено Posting (76)";
        }
 
        private void Go ()
        {
 
        }
 
        public void sql_query_deleting_data ()
        {
            if (table == 1)
            {
                Posting_deleting ();
            }
            if (table == 2)
            {
                Payments_deleting ();
            }
        }
 
        private void sql_query_selection_data_to_grid ()
        {
            if (cb_tabselection.Text == "Начислено Posting (76)")
            {
                Posting_selection ();
                table = 1;
            }
            if (cb_tabselection.Text == "Поступления Payments (36)")
            {
                Payments_selection ();
                table = 2;
            }
        }
 
        private void Posting_selection ()
        {
            string constring = @"Data Source";
            SqlConnection sqlconn = new SqlConnection(constring);
            SqlCommand sqlcomm = new SqlCommand("p_selecting_Posting", sqlconn);
            sqlcomm.CommandType = System.Data.CommandType.StoredProcedure;
 
            try
            {
                sqlconn.Open();
                SqlDataAdapter sqladap = new SqlDataAdapter(sqlcomm);
                DataTable dtable = new DataTable();
                sqladap.Fill(dtable);
                BindingSource bso = new BindingSource();
                bso.DataSource = dtable;
                dgv_yearmonthaggregation.DataSource = bso;
                sqladap.Update(dtable);
                this.dgv_yearmonthaggregation.RowHeadersVisible = false;
                foreach (DataGridViewColumn column in dgv_yearmonthaggregation.Columns)
                {
                    column.SortMode = DataGridViewColumnSortMode.NotSortable;
                    column.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
                }
                this.dgv_yearmonthaggregation.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                this.dgv_yearmonthaggregation.Columns[0].DefaultCellStyle.Font = new Font(dgv_yearmonthaggregation.DefaultCellStyle.Font, FontStyle.Bold);
                this.dgv_yearmonthaggregation.Columns[0].DefaultCellStyle.BackColor = Color.LightGray;
                this.dgv_yearmonthaggregation.Columns[0].Width = 53;
                for (int i = 1; i < 13; i++)
                {
                    this.dgv_yearmonthaggregation.Columns[i].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                    this.dgv_yearmonthaggregation.Columns[i].Width = 65;
                    this.dgv_yearmonthaggregation.Columns[0].DefaultCellStyle.Font = new Font("Calibri", 9);
                    this.dgv_yearmonthaggregation.Columns[i].DefaultCellStyle.Format = "N0";
                }
                sqlconn.Close();
                this.dgv_yearmonthaggregation.ClearSelection();
            }
            catch (Exception ex) { }
 
        }
 
        private void Payments_selection ()
        {
            string constring = @"Data Source";
            SqlConnection sqlconn = new SqlConnection(constring);
            SqlCommand sqlcomm = new SqlCommand("p_selecting_Payments", sqlconn);
            sqlcomm.CommandType = System.Data.CommandType.StoredProcedure;
 
            try
            {
                sqlconn.Open();
                SqlDataAdapter sqladap = new SqlDataAdapter(sqlcomm);
                DataTable dtable = new DataTable();
                sqladap.Fill(dtable);
                BindingSource bso = new BindingSource();
                bso.DataSource = dtable;
                dgv_yearmonthaggregation.DataSource = bso;
                sqladap.Update(dtable);
                this.dgv_yearmonthaggregation.RowHeadersVisible = false;
                foreach (DataGridViewColumn column in dgv_yearmonthaggregation.Columns)
                {
                    column.SortMode = DataGridViewColumnSortMode.NotSortable;
                    column.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
                }
                this.dgv_yearmonthaggregation.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                this.dgv_yearmonthaggregation.Columns[0].DefaultCellStyle.Font = new Font(dgv_yearmonthaggregation.DefaultCellStyle.Font, FontStyle.Bold);
                this.dgv_yearmonthaggregation.Columns[0].DefaultCellStyle.BackColor = Color.LightGray;
                this.dgv_yearmonthaggregation.Columns[0].Width = 53;
                for (int i = 1; i < 13; i++)
                {
                    this.dgv_yearmonthaggregation.Columns[i].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
                    this.dgv_yearmonthaggregation.Columns[i].Width = 65;
                    this.dgv_yearmonthaggregation.Columns[0].DefaultCellStyle.Font = new Font("Calibri",9);
                    this.dgv_yearmonthaggregation.Columns[i].DefaultCellStyle.Format = "N0";
                }
                sqlconn.Close();
                this.dgv_yearmonthaggregation.ClearSelection();
            }
            catch (Exception ex) { }
        }
 
        private void Posting_deleting ()
        {
            string constring = @"Data Source";
            SqlConnection sqlconn = new SqlConnection(constring);
            SqlCommand sqlcomm = new SqlCommand("p_deleting_Posting", sqlconn);
            sqlcomm.CommandType = System.Data.CommandType.StoredProcedure;
            sqlcomm.Parameters.Add("@date", System.Data.SqlDbType.DateTime).Value = date_deleting_from;
 
            try
            {
                sqlconn.Open();
                sqlcomm.ExecuteNonQuery();
                sqlconn.Close();
            }
            catch (Exception ex) { };
        }
 
        private void Payments_deleting ()
        {
            string constring = @"Data Source";
            SqlConnection sqlconn = new SqlConnection(constring);
            SqlCommand sqlcomm = new SqlCommand("p_deleting_Payments", sqlconn);
            sqlcomm.CommandType = System.Data.CommandType.StoredProcedure;
            sqlcomm.Parameters.Add("@date", System.Data.SqlDbType.DateTime).Value = date_deleting_from;
 
            try
            {
                sqlconn.Open();
                sqlcomm.ExecuteNonQuery();
                sqlconn.Close();
            }
            catch (Exception ex) { };
        }
 
        private void btn_selection_Click(object sender, EventArgs e)
        {
            sql_query_selection_data_to_grid();
            dgv_yearmonthaggregation.Visible = true;
            pb_vs.Visible = false;
            groupBox2.Visible = true;
        }
 
        private void btn_deleting_Click(object sender, EventArgs e)
        {
            WarningForm f = new WarningForm ();
            f.ShowDialog();
            //this.Hide();
        }
 
        private void cb_tabselection_SelectedIndexChanged(object sender, EventArgs e)
        {
            pb_vs.Visible = true;
            dgv_yearmonthaggregation.Visible = false;
            groupBox2.Visible = false;
        }
 
    }


Форма 2

Кликните здесь для просмотра всего текста
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public partial class WarningForm : Form
    {
        MainForm frm;
        public WarningForm()
        {            
            InitializeComponent();
            MainForm frm = new MainForm();
            warning_mess();
        }
 
        private void warning_mess ()
        {
            if (frm.table == 1)
            {
                lbl_warning_message.Text = "Удалить данных таблицы Posting (76) c " + Convert.ToString(frm.dtp_dateselection.Value) + "?";
            }
            if (frm.table == 2)
            {
                lbl_warning_message.Text = "Удалить данных таблицы Payments (36) c " + Convert.ToString(frm.dtp_dateselection.Value) + "?";
            }
        }
 
        private void confirmation_deleting ()
        {
            frm.date_deleting_from = frm.dtp_dateselection.Value;
            frm.sql_query_deleting_data();
        }
 
        private void btn_conf_deleting_Click(object sender, EventArgs e)
        {
            confirmation_deleting();
            this.Close();
        }
 
        private void btn_cancel_deleting_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }


Думал сам разобраться, но уже второй день сижу. не понимаю, вроде логика правильная, но все равно не катит
Миниатюры
Возникает исключение  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2015, 15:00
Ответы с готовыми решениями:

Почему возникает необработанное исключение FormatException?
Подскажите пожалуйста, почему возникает необработанное исключение FormatException? data - объект...

Возникает ошибка "необработанное исключение типа System.StackOverflowException"
Привет. Возникает ошибка &quot;необработанное исключение типа System.StackOverflowException&quot; На этой...

Возникает argumentnullexception
Простой конвертер. как исправить ошибку?

Возникает ошибка из-за функции
Как исправить ошибку в label3.Text=F(2, n, 0, m, a);//начальный делитель, число, начало...

4
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
26.09.2015, 15:15 2
googlogmob, у вас есть два объекта - форма типа MainForm , и форма типа WarningForm.
Теперь, в форме WarningForm вы пытаетесь получить таблицу из первой формы. И что вы делаете? Вы создаете новый объект MainForm (в конструкторе WarningForm), который не имеет никакого отношения к исходной форме и пытаетесь у этого объекта читать какие-то данные. Результат предсказуем.
(да кстати еще и создаете неправильно, присваиваете локальной переменной, которая грохается сразу после выхода из конструктора)

Нужно передавать первую форму в конструктор второй формы, что бы она работала с нужным объектом:
C#
1
2
3
4
5
6
        public WarningForm(MainForm frm)
        {            
            InitializeComponent();
            this.frm = frm;
            warning_mess();
        }
Но на самом деле это тоже неправильно. Хоть это и будет работать, но передавать одну форму в другую форму - плохая практика. Если у вас WarningForm нужно для отображения предупреждений, то не его дело формировать эти предупреждения. Создавать предупреждение нужно в форме MainForm, а затем предавать его уже в WarningForm.
C#
1
2
3
4
5
6
        public WarningForm(string messge)
        {            
            InitializeComponent();
            lbl_warning_message.Text = message;
            warning_mess();
        }
Тогда WarningForm станет независимой от MainForm, и его можно будет вызывать и в других местах, с другим текстом.

Ну и наконец, WarningForm вообще не нужен, поскольку существует MessageBox, который может быть и с Warning.
1
5 / 5 / 5
Регистрация: 17.12.2013
Сообщений: 202
26.09.2015, 18:46  [ТС] 3
Storm23, сделал как Вы подсказали, работает. Спасибо

Добавлено через 3 часа 3 минуты
А как вызывать методы с другой формы, если не применять передачу одной формы в другую?
0
Эксперт .NETАвтор FAQ
10410 / 5140 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
26.09.2015, 21:37 4
Цитата Сообщение от googlogmob Посмотреть сообщение
А как вызывать методы с другой формы, если не применять передачу одной формы в другую?
В главной форме:
C#
1
2
3
4
5
            var form = new WarningForm("...");
            if(form.ShowDialog() == DialogResult.OK)
            {
                //делаем удаление или что там у вас
            }
В форме WarningForm:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    public partial class WarningForm : Form
    {
        public WarningForm(string message)
        {
            InitializeComponent();
            lbMessage.Text = message;
        }
 
        private void btOK_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.OK;
        }
 
        private void btCancel_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.Cancel;
        }
    }
0
5 / 5 / 5
Регистрация: 17.12.2013
Сообщений: 202
26.09.2015, 22:47  [ТС] 5
Storm23, спасибо еще раз
0
26.09.2015, 22:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2015, 22:47
Помогаю со студенческими работами здесь

Не пойму в чем возникает ошибка
Привет. Написал программу по расчету уравнения f(x)=e^x+ln*x-10*x. Проблема состоит в том, что...

Возникает HostNotFound при GetHostEntry
Зравствуйте. Возникла проблема при написании лабораторной. Ping ping = new...

Возникает ошибка с методом add
Доброго времени суток, в курсовой работает возникает ошибка с добавлением компонентов на форму...

Почему возникает ошибка NullReferenceException
Подскажите кто сможет...Пишу под WindowsMobile, использую базу SQLite. Короче есть у меня метод в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru