Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2020, 03:41   #1
Sananaska
Новичок
Джуниор
 
Регистрация: 10.11.2019
Сообщений: 2
По умолчанию System.InvalidCastException: "Заданное приведение является недопустимым."

Нажимаю на строчку в таблице - выдает эту ошибку (System.InvalidCastException: "Заданное приведение является недопустимым.").
ошибка в строчке id = (int?)dataGridView1[0, dataGridView1.SelectedRows[0].Index].Value;
В чем может быть проблема? Датагрид настроен верно, в других формах ошибку не выдает, настроены одинаково



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CompSecurity
{
public partial class Workers : Form
{
int? id;

void LoadData(Context db)
{
dataGridView1.DataSource = db.Workers.ToList();
Clear();
}

void Clear()
{
dataGridView1.ClearSelection();
id = null;
txtBoxWorkerFIO.Text = txtBoxWorkerSalary.Text = txtBoxWorkerCitizenship.Text
= txtBoxWorkerDateOfBirth.Text = txtBoxWorkerAddress.Text = txtBoxPhone.Text = "";
}

bool CheckData()
{
return txtBoxWorkerFIO.Text != "" && txtBoxWorkerSalary.Text != "" && txtBoxWorkerCitizenship.Text != ""
&& txtBoxWorkerDateOfBirth.Text != "" && txtBoxWorkerAddress.Text != "" && txtBoxPhone.Text != "";
}

Worker FindWorkers(Context db)
{
return db.Workers.Where(s => s.WorkerId == id).First();
}

public Workers()
{
InitializeComponent();
}
private void Workers_Load_1(object sender, EventArgs e)
{
using (Context db = new Context())
{
LoadData(db);
}
}
private void DataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
id = (int?)dataGridView1[0, dataGridView1.SelectedRows[0].Index].Value;

using (Context db = new Context())
{
Worker worker = FindWorkers(db);

txtBoxWorkerFIO.Text = worker.FIO;
txtBoxWorkerSalary.Text = worker.Salary;
txtBoxWorkerCitizenship.Text = worker.Citizenship;
txtBoxWorkerDateOfBirth.Text = worker.DateOfBirth;
txtBoxWorkerAddress.Text = worker.Address;
txtBoxPhone.Text = worker.PhoneNumber;
}

}
private void BtnInsert_Click(object sender, EventArgs e)
{
if (!CheckData())
MessageBox.Show("Введите данные");
else
using (Context db = new Context())
{
db.Workers.Add(
new Worker
{
FIO = txtBoxWorkerFIO.Text,
Salary = txtBoxWorkerSalary.Text,
Citizenship = txtBoxWorkerCitizenship.Text,
DateOfBirth = txtBoxWorkerDateOfBirth.Text,
Address = txtBoxWorkerAddress.Text,
PhoneNumber = txtBoxPhone.Text
});
db.SaveChanges();
LoadData(db);
}
Clear();
}

private void BtnUpdate_Click(object sender, EventArgs e)
{

}

private void BtnDelete_Click(object sender, EventArgs e)
{
using (Context db = new Context())
{
Worker worker = FindWorkers(db);

if (MessageBox.Show($"Вы уверены, что хотите удалить работника {worker.FIO}?\n", "Подтверждение удаления",
MessageBoxButtons.YesNo) == DialogResult.Yes)
{
if (worker.Services.Count > 0)
{
var service = db.Services.Where(s => s.WorkerId == id);

foreach (Service s in service)
{
db.Services.Remove(s);
}
MessageBox.Show("Также будет удалена запись о предоставлении услуг");
}
db.Workers.Remove(worker);

db.SaveChanges();
LoadData(db);
}
else Clear();
}
}


}
}
Sananaska вне форума Ответить с цитированием
Старый 21.12.2020, 11:56   #2
ichi
Форумчанин
 
Регистрация: 14.03.2012
Сообщений: 147
По умолчанию

Цитата:
Сообщение от Sananaska Посмотреть сообщение
ошибка в строчке id = (int?)dataGridView1[0, dataGridView1.SelectedRows[0].Index].Value;
В этой строчке знак вопроса какую роль играет?
ichi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка C2440 приведение типов: невозможно преобразовать "std::_Array_iterator<_Ty,65>" в "int" NIKITAY Общие вопросы C/C++ 13 07.01.2019 11:51
Приведение является недопустимым по неявной причине kainapro C# (си шарп) 0 26.07.2017 11:01
Помогите исправить ошибку: вывести все "недопалиндромы" из указанного диапазона (от a до b). "недопалиндром" - число которое само не является палиндромов,но сумма его цифр является jeppa Паскаль, Turbo Pascal, PascalABC.NET 8 06.10.2016 10:57
Невозможно преобразовать параметр 1 из "System::Net::Mail::SmtpClient ^" в "System::String ^" Вероника99 C# (си шарп) 4 18.05.2015 22:22
C# Ошибка "System.Random" не содержит определение для "Range" svetlana_klshv Помощь студентам 2 16.05.2015 21:05