W
WInk
Программа написана на С#. Тип - база данных. При попытке ввода запроса в окно поиска выскакивает следующее сообщение:
Вот код тела (Основное_окно.cs):
Не могу понять, что его не устраивает... Очень надеюсь на дельный совет от мастеров программирования. Заранее благодарю
"Необрабатываемое исключение в приложении". Текст исключения:
"System.InvalidOperationException: Непереданные новые строки нельзя сделать невидимыми.
в System.Windows.Forms.DataGridViewBand.set_Visible(Boolean value)
в System.Windows.Forms.DataGridViewRow.set_Visible(Boolean value)
в Учебная_группа.Основное_окно.toolStripTextBox1_TextChanged(Object sender, EventArgs e) в C:\Users\Владелец\Desktop\Учебная_группа (рабочая версия)\Учебная_группа\Основное_окно.cs:строка 506
в System.Windows.Forms.ToolStripItem.RaiseEvent(Object key, EventArgs e)
в System.Windows.Forms.ToolStripItem.OnTextChanged(EventArgs e)
в System.Windows.Forms.ToolStripControlHost.HandleTextChanged(Object sender, EventArgs e)
в System.Windows.Forms.Control.OnTextChanged(EventArgs e)
в System.Windows.Forms.TextBoxBase.OnTextChanged(EventArgs e)
в System.Windows.Forms.TextBoxBase.WmReflectCommand(Message& m)
в System.Windows.Forms.TextBoxBase.WndProc(Message& m)
в System.Windows.Forms.TextBox.WndProc(Message& m)
в System.Windows.Forms.ToolStripTextBox.ToolStripTextBoxControl.WndProc(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)"
Вот код тела (Основное_окно.cs):
C++:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Xml.Schema;
using System.Xml;
namespace Учебная_группа
{
public partial class Основное_окно : Form
{
static public List<int> grafic = new List<int>(); //массив для построения графика, содержащий кол-во человек на каждом курсе и номер курса
static public string фамилияСтудента;
public Основное_окно()
{
InitializeComponent();
}
public Вход_в_программу f2;
public График f4;
public О_программе f5;
public Информация f6;
public OpenFileDialog openFileDialog = new OpenFileDialog();
public SaveFileDialog saveFileDialog = new SaveFileDialog();
public string имяОткрытогоФайла;
public DataGridViewRowCollection строки;
private int рейтинг1, рейтинг2, рейтинг3, рейтинг4, рейтинг5;
private bool отметка = false;
private void Основное_окно_Load(object sender, EventArgs e)
{
f2 = new Вход_в_программу();
f2.ShowDialog();
if (!f2.flag2)
{
РежимОграниченнойФункциональности();
}
// Открыть();
}
private void полнойФункциональностиToolStripMenuItem_Click(object sender, EventArgs e)
{
f2 = new Вход_в_программу();
f2.ShowDialog();
if (!f2.flag2)
{
РежимОграниченнойФункциональности();
}
else
{
РежимПолнойФункциональности();
}
}
private void ограниченнойФункциональностиToolStripMenuItem_Click(object sender, EventArgs e)
{
РежимОграниченнойФункциональности();
}
private void РежимОграниченнойФункциональности()
{
сохранитьToolStripMenuItem.Visible = false;
сохранитьКакToolStripMenuItem.Visible = false;
сохранить.Visible = false;
информацияОбУчебныхГруппах.AllowUserToAddRows = false;
информацияОбУчебныхГруппах.AllowUserToDeleteRows = false;
информацияОСтудентах.AllowUserToAddRows = false;
информацияОСтудентах.AllowUserToDeleteRows = false;
}
private void РежимПолнойФункциональности()
{
сохранитьToolStripMenuItem.Visible = true;
сохранитьКакToolStripMenuItem.Visible = true;
сохранить.Visible = true;
информацияОбУчебныхГруппах.AllowUserToAddRows = true;
информацияОбУчебныхГруппах.AllowUserToDeleteRows = true;
информацияОСтудентах.AllowUserToAddRows = true;
информацияОСтудентах.AllowUserToDeleteRows = true;
}
private void сохранитьToolStripMenuItem_Click(object sender, EventArgs e)
{
Сохранить(/*имяОткрытогоФайла*/);
}
private void сохранитьКакToolStripMenuItem_Click(object sender, EventArgs e)
{
/// сохранить как
saveFileDialog.InitialDirectory = Environment.CurrentDirectory;
saveFileDialog.DefaultExt = "*.xml";
saveFileDialog.Filter = "Xml Files|*.xml";
if (saveFileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK &&
saveFileDialog.FileName.Length > 0)
try
{
группы_Факультет.WriteXml(saveFileDialog.FileName);//, XmlWriteMode.WriteSchema);
MessageBox.Show("Файл сохранен.");
}
catch
{
MessageBox.Show("Произошла ошибка. К сожалению данные не сохранились.");
return;
}
имяОткрытогоФайла = saveFileDialog.FileName;
}
private void сохранить_Click(object sender, EventArgs e)
{
Сохранить(/*имяОткрытогоФайла*/);
}
private void Сохранить(/*string имяОткрытогоФайла*/)
{
string filePath = Environment.CurrentDirectory +"\\Учебная Группа+Схема.xml";
//filePath = filePath + "\\" + имяОткрытогоФайла;
/// Записать данные набора в XML-файл.
try
{
группы_Факультет.WriteXml(filePath);//, XmlWriteMode.WriteSchema);
MessageBox.Show("Файл сохранен.");
}
catch
{
MessageBox.Show("Произошла ошибка. К сожалению данные не сохранились.");
return;
}
}
private void открытьToolStripMenuItem_Click(object sender, EventArgs e)
{
Открыть();
}
private void открыть_Click(object sender, EventArgs e)
{
Открыть();
}
private void Открыть()
{
openFileDialog.DefaultExt = "*.xml";
openFileDialog.Filter = "Xml Files|*.xml";
информацияОбУчебныхГруппах.DataSource = null;
информацияОСтудентах.DataSource = null;
группы_Факультет.таблицаУчебныеГруппы.DataSet.Clear();
группы_Факультет.таблицаСтуденты.DataSet.Clear();
if (openFileDialog.ShowDialog() == DialogResult.OK &&
openFileDialog.FileName.Length > 0)
{
try
{
группы_Факультет.ReadXml(openFileDialog.FileName);//, XmlReadMode.ReadSchema);
информацияОбУчебныхГруппах.DataSource = группы_Факультет.таблицаУчебныеГруппы;
информацияОСтудентах.DataSource = группы_Факультет.таблицаСтуденты;
}
catch (XmlException)
{
MessageBox.Show("Ошибка в структуре исходного XML файла");
}
catch (OutOfMemoryException)
{
MessageBox.Show("Недостаточно памяти");
}
имяОткрытогоФайла = openFileDialog.FileName;
}
ПодсчетКоличестваСтудентовИГрупп();
}
private void ПодсчетКоличестваСтудентовИГрупп()
{
if (!f2.flag2)
{
toolStripStatusLabel2.Text = информацияОСтудентах.Rows.Count.ToString();
toolStripStatusLabel4.Text = информацияОбУчебныхГруппах.Rows.Count.ToString();
}
else
{
int k1, k2;
k1 = информацияОСтудентах.Rows.Count - 1;
k2 = информацияОбУчебныхГруппах.Rows.Count - 1;
toolStripStatusLabel2.Text = k1.ToString();
toolStripStatusLabel4.Text = k2.ToString();
}
}
private void график_Click(object sender, EventArgs e)
{
f4 = new График();
f4.ShowDialog();
}
private void оПрограммеToolStripMenuItem_Click(object sender, EventArgs e)
{
f5 = new О_программе();
f5.ShowDialog();
}
private void информацияОСтудентах_RowHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
grafic.Clear();
for (int i = 4; i < 9; i++)
{
try
{
рейтинг1 = int.Parse(информацияОСтудентах.Rows[e.RowIndex].Cells[i].Value.ToString());
}
catch (FormatException)
{
MessageBox.Show("Ошибка!!! Проверьте корректность данных в столбцах рейтинга");
}
Формирование_массива_для_графика();
}
фамилияСтудента = информацияОСтудентах.Rows[e.RowIndex].Cells[2].Value.ToString();
f4 = new График();
f4.ShowDialog();
}
private void Формирование_массива_для_графика()
{
grafic.Add(рейтинг1);
}
private void стипендия_CheckedChanged(object sender, EventArgs e)
{
if (стипендия.Checked)
{
ОтметитьСтудентов();
отметка = true;
}
else
{
if (отметка == true)
{
УдалитьОтметку();
отметка = false;
}
}
}
private void успеваемость_CheckedChanged(object sender, EventArgs e)
{
if (успеваемость.Checked)
{
ОтметитьСтудентов();
отметка = true;
}
else
{
if (отметка == true)
{
УдалитьОтметку();
отметка = false;
}
}
}
private void ОтметитьСтудентов()
{
//int сумма = 0;
if (f2.flag2)
{
информацияОСтудентах.AllowUserToAddRows = false;
}
строки = информацияОСтудентах.Rows;
ПоискСтудентовСПлохойУспеваемостью(строки);
}
private void ПоискСтудентовСПлохойУспеваемостью(DataGridViewRowCollection строки)
{
int сумма = 0;
int среднийБалл = 0;
foreach (DataGridViewRow row in строки) // Перебираем строки
{
if (row.Cells[4].Value == null)
{
MessageBox.Show("Информация об успеваемости отсутствует! \n Поверьте заполнены ли столбцы с рейтингом");
//break;
}
else if (row.Cells[4].Value != null && row.Cells[5].Value == null)
{
try
{
рейтинг1 = int.Parse(row.Cells[4].Value.ToString());
}
catch (FormatException)
{
MessageBox.Show("Ошибка!!! Проверьте корректность данных в столбцах рейтинга");
}
сумма = рейтинг1;
среднийБалл = сумма;
//break;
}
else if (row.Cells[4].Value != null && row.Cells[5].Value != null && row.Cells[6].Value == null)
{
try
{
рейтинг1 = int.Parse(row.Cells[4].Value.ToString());
рейтинг2 = int.Parse(row.Cells[5].Value.ToString());
}
catch (FormatException)
{
MessageBox.Show("Ошибка!!! Проверьте корректность данных в столбцах рейтинга");
}
сумма = рейтинг1 + рейтинг2;
среднийБалл = сумма / 2;
//break;
}
else if (row.Cells[4].Value != null && row.Cells[5].Value != null && row.Cells[6].Value != null && row.Cells[7].Value == null)
{
try
{
рейтинг1 = int.Parse(row.Cells[4].Value.ToString());
рейтинг2 = int.Parse(row.Cells[5].Value.ToString());
рейтинг3 = int.Parse(row.Cells[6].Value.ToString());
}
catch (FormatException)
{
MessageBox.Show("Ошибка!!! Проверьте корректность данных в столбцах рейтинга");
}
сумма = рейтинг1 + рейтинг2 + рейтинг3;
среднийБалл = сумма / 3;
//break;
}
else if (row.Cells[4].Value != null && row.Cells[5].Value != null && row.Cells[6].Value != null && row.Cells[7].Value != null && row.Cells[8].Value == null)
{
try
{
рейтинг1 = int.Parse(row.Cells[4].Value.ToString());
рейтинг2 = int.Parse(row.Cells[5].Value.ToString());
рейтинг3 = int.Parse(row.Cells[6].Value.ToString());
рейтинг4 = int.Parse(row.Cells[7].Value.ToString());
}
catch (FormatException)
{
MessageBox.Show("Ошибка!!! Проверьте корректность данных в столбцах рейтинга");
}
сумма = рейтинг1 + рейтинг2 + рейтинг3 + рейтинг4;
среднийБалл = сумма / 4;
//break;
}
else
{
try
{
рейтинг1 = int.Parse(row.Cells[4].Value.ToString());
рейтинг2 = int.Parse(row.Cells[5].Value.ToString());
рейтинг3 = int.Parse(row.Cells[6].Value.ToString());
рейтинг4 = int.Parse(row.Cells[7].Value.ToString());
рейтинг5 = int.Parse(row.Cells[8].Value.ToString());
}
catch (FormatException)
{
MessageBox.Show("Ошибка!!! Проверьте корректность данных в столбцах рейтинга");
}
сумма = рейтинг1 + рейтинг2 + рейтинг3 + рейтинг4 + рейтинг5;
среднийБалл = сумма / 5;
// break;
}
if (успеваемость.Checked)
{
if (среднийБалл < 40)
{
row.Cells[2].Style.BackColor = Color.DeepPink;
row.Cells[3].Style.BackColor = Color.DeepPink;
}
}
else if (стипендия.Checked)
{
if (сумма >= 400)
{
row.Cells[2].Style.BackColor = Color.DarkSeaGreen;
row.Cells[3].Style.BackColor = Color.DarkSeaGreen;
}
}
}
}
private void УдалитьОтметку()
{
foreach (DataGridViewRow row in информацияОСтудентах.Rows) // Перебираем строки
{
row.Cells[2].Style.BackColor = SystemColors.Window;
row.Cells[3].Style.BackColor = SystemColors.Window;
}
if (!f2.flag2)
{
информацияОСтудентах.AllowUserToAddRows = false;
}
else
{
информацияОСтудентах.AllowUserToAddRows = true;
}
}
private void информацияОбУчебныхГруппах_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
строки = информацияОСтудентах.Rows;
string номерГруппы = информацияОбУчебныхГруппах.Rows[e.RowIndex].Cells[0].Value.ToString();
//textBox1.Text = номерГруппы;
foreach (DataGridViewRow row in строки)
{
if (row.Cells[1].Value.ToString() == номерГруппы)
{
row.Visible = true;
}
else
{
row.Visible = false;
}
}
ПодсчетКоличестваСтудентовИГрупп();
//информацияОбУчебныхГруппах.Rows[e.RowIndex].Cells[1].Value.ToString() = toolStripStatusLabel2.Text;
}
private void информацияОСтудентах_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
{
if (f2.flag2)
{
f6 = new Информация();
f6.ShowDialog();
}
}
private void среднийБаллToolStripMenuItem_Click(object sender, EventArgs e)
{
if (информацияОСтудентах.CurrentCellAddress != null)
{
int index = информацияОСтудентах.CurrentCellAddress.Y;
try
{
рейтинг1 = int.Parse(информацияОСтудентах.Rows[index].Cells[4].Value.ToString());
рейтинг2 = int.Parse(информацияОСтудентах.Rows[index].Cells[5].Value.ToString());
рейтинг3 = int.Parse(информацияОСтудентах.Rows[index].Cells[6].Value.ToString());
рейтинг4 = int.Parse(информацияОСтудентах.Rows[index].Cells[7].Value.ToString());
рейтинг5 = int.Parse(информацияОСтудентах.Rows[index].Cells[8].Value.ToString());
}
catch (FormatException)
{
MessageBox.Show("Ошибка!!! Проверьте корректность данных в столбцах рейтинга");
}
int среднийБалл = (рейтинг1 + рейтинг2 + рейтинг3 + рейтинг4 + рейтинг5) /5;
MessageBox.Show("Средний балл студента = " + среднийБалл.ToString(), "Средний балл");
}
}
private void суммуБалловToolStripMenuItem_Click(object sender, EventArgs e)
{
if (информацияОСтудентах.CurrentCellAddress != null)
{
int index = информацияОСтудентах.CurrentCellAddress.Y;
try
{
рейтинг1 = int.Parse(информацияОСтудентах.Rows[index].Cells[4].Value.ToString());
рейтинг2 = int.Parse(информацияОСтудентах.Rows[index].Cells[5].Value.ToString());
рейтинг3 = int.Parse(информацияОСтудентах.Rows[index].Cells[6].Value.ToString());
рейтинг4 = int.Parse(информацияОСтудентах.Rows[index].Cells[7].Value.ToString());
рейтинг5 = int.Parse(информацияОСтудентах.Rows[index].Cells[8].Value.ToString());
}
catch (FormatException)
{
MessageBox.Show("Ошибка!!! Проверьте корректность данных в столбцах рейтинга");
}
int суммаБаллов = рейтинг1 + рейтинг2 + рейтинг3 + рейтинг4 + рейтинг5;
MessageBox.Show("Сумма баллов студента = " + суммаБаллов.ToString(), "Сумма баллов");
}
}
private void toolStripTextBox1_TextChanged(object sender, EventArgs e) - алгоритм поиска
{
/*int i;
for (i = 0; i < информацияОСтудентах.Rows.Count - 1; i++)
информацияОСтудентах.Rows[i].Visible = true;*/
if (toolStripTextBox1.Text != "")
foreach (DataGridViewRow row in информацияОСтудентах.Rows)
{
row.Visible = true;
if (!((row.Cells[0].ToString() == toolStripTextBox1.Text) ||
(row.Cells[1].ToString() == toolStripTextBox1.Text)) ||
(row.Cells[2].ToString() == toolStripTextBox1.Text) ||
(row.Cells[3].ToString() == toolStripTextBox1.Text) ||
(row.Cells[4].ToString() == toolStripTextBox1.Text) ||
(row.Cells[5].ToString() == toolStripTextBox1.Text) ||
(row.Cells[6].ToString() == toolStripTextBox1.Text) ||
(row.Cells[7].ToString() == toolStripTextBox1.Text) ||
(row.Cells[8].ToString() == toolStripTextBox1.Text))
{
//информацияОСтудентах.Rows[row.Index].Visible = false;
[b]row.Visible = false;[/b] - 506 строка!
}
}
}
}
}
Не могу понять, что его не устраивает... Очень надеюсь на дельный совет от мастеров программирования. Заранее благодарю