Checkbox state-указанное приведение недопустимо?
Привет,
У меня есть 3 флажка, два из которых(opOne,defOne) находятся в datagridview. Im получает сообщение об ошибке" указанное приведение недопустимо".Если вы нажмете на ckbOpOne, он должен изменить значение opOne в зависимости от значения defOne. Приведенный ниже код работает, если я изменяю все состояния defOne на true, а затем нажимаю ckbOne. В некоторых строках уже было установлено значение defOne true, но оно не работает?
Редактирование 1:
Любую строку в defOne может быть true или false(который предварительно в БД) как только вы нажмете ckbOne он смотрит на defOne, чтобы увидеть, если его значение true или false, если это правда, это меняет opOne значение true.
Что должно произойти:
Начальное состояние = [] ([], [T])
Пользователь нажимает ckbOne = [T] ([], [T]) = [T] ([T], [T])
Что я уже пробовал:
if (ckbOpOne.Checked) { foreach (DataGridViewRow row in dgv.Rows) { DataGridViewCheckBoxCell opOne = (DataGridViewCheckBoxCell)row.Cells[1]; DataGridViewCheckBoxCell defOne = (DataGridViewCheckBoxCell)row.Cells[7]; opOne.Value = (defOne.Value == null ? false : (bool)defOne.Value); } } else { foreach (DataGridViewRow row in dgv.Rows) { DataGridViewCheckBoxCell opOne = (DataGridViewCheckBoxCell)row.Cells[1]; DataGridViewCheckBoxCell defOne = (DataGridViewCheckBoxCell)row.Cells[7]; opOne.Value = false; //!(defOne.Value == null ? false : (bool)defOne.Value); } }
Правка 2:
У меня это вроде как работает.
if (checkBox1.Checked) { foreach (DataGridViewRow row in dgv.Rows) { if (!(Convert.IsDBNull(row.Cells[6].Value)) && Convert.ToBoolean(row.Cells[6].Value) == true) { DataGridViewCheckBoxCell opOne = (DataGridViewCheckBoxCell)row.Cells[0]; opOne.Value = !(opOne.Value == null ? false : (bool)opOne.Value); } } } else { foreach (DataGridViewRow row in dgv.Rows) { DataGridViewCheckBoxCell opOne = (DataGridViewCheckBoxCell)row.Cells[0]; DataGridViewCheckBoxCell defOne = (DataGridViewCheckBoxCell)row.Cells[6]; if(Convert.ToBoolean(row.Cells[6].Value) == true && Convert.ToBoolean(row.Cells[0].Value) == true) { opOne.Value = false; } } } }
Karthik_Mahalingam
убедитесь, что 2-й и 8-й столбцы имеют тип checkbox.
BEBE2011
Да, проверил. они являются.
Karthik_Mahalingam
я проверил ваш код, он работает без исключения.
при каком сценарии вы получаете эту ошибку
BEBE2011
Я обновлю свой вопрос лучшим примером
Karthik_Mahalingam
ладно.
BEBE2011
я обновил свой вопрос
Karthik_Mahalingam
что должно произойти, когда ckbOpOne.Checked = true и ckbOpOne.Проверено = ложь ?
если ckbopone истинен, то defone следует отнести к opone?
что на ложном условии?
BEBE2011
Вы правы, когда ckbOpOne истинен. Если ckbOpOne является ложным defOne не должен быть назначен opOne
Karthik_Mahalingam
затем удалите часть else в приведенном выше коде..
BEBE2011
я получаю ту же ошибку, когда удаляю else
Karthik_Mahalingam
в какой строке вы получаете ошибку
BEBE2011
opOne.Значение = (defOne.Значение = = null ? false: (bool)defOne.Ценность);
Karthik_Mahalingam
во время ошибки держите точку останова и посмотрите, каково значение в defOne.Ценность
Herman<T>.Instance
является ли defOne нулевым?
BEBE2011
defOne может быть null, или true значение берется из БД.
Herman<T>.Instance
что происходит, когда вы заявляете:
opOne.Значение = defOne.Ценность;
ZurdoDev
Это легко исправить с помощью очень простых методов отладки.