BEBE2011 Ответов: 0

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

Это легко исправить с помощью очень простых методов отладки.

0 Ответов