Member 14649908 Ответов: 3

Исправьте исключение:строка не была распознана как допустимое логическое значение


Код
Convert.ToBoolean(row.Cells["chkBox"].Value
генерировать исключения
System.FormatException: 'String was not recognized as a valid Boolean.'


Я попробовал була.Разбор и бул.TryParse но в обеих ситуациях бросается одно и то же исключение.

Что я уже пробовал:

private void btnExportToExcel_Click(object sender, EventArgs e)
        {
            DataGridViewRow row = new DataGridViewRow();
           
            ArrayList myList = new ArrayList();

         

            for (int i = 0; i < CategoryGV.Rows.Count; i++)
            {
                row = CategoryGV.Rows[i];

                if (Convert.ToBoolean(row.Cells["chkBox"].Value))
                {
                    
                   
                    myList.Add(row.Index);    
                }

            }


            if(myList.Count>0)
            {
                exportSelectedRowsToExcel(myList);
            }
            else
            {
                MessageBox.Show("No rows selected");
            }

        }

phil.o

Пожалуйста, укажите, какое фактическое строковое значение вы пытаетесь преобразовать в логическое.

3 Ответов

Рейтинг:
2

phil.o

Если ячейка содержит флажок, то решение может быть простым, как

if (row.Cells["chkBox"].Checked)

Checked свойство возвращает логическое значение, которое вам вообще не нужно разбирать.

Если ячейка содержит строковое значение, которое Parse метод не распознается, тогда вам, возможно, придется создать свою собственную функцию, принимая во внимание ваши фактические строковые значения:
public static bool CustomBoolParse(string value)
{
   value = value?.ToLower().Trim() ?? string.Empty;
   switch (value)
   {
      case "true":
      case "wahr":
      case "verdad":
      case "vrai":
      case "1":
         return true;
      case "false":
      case "falsch":
      case "falso":
      case "faux":
      case "0":
      default:
         return false;
   }
}

Обратите внимание, что это всего лишь примеры, так как я не знаю, какое фактическое строковое значение вы пытаетесь разобрать. Измените функцию в соответствии с вашими конкретными потребностями.


CPallini

5.

Рейтинг:
2

Ashutosh Gpt

plesae проверьте, что такое точное значение "row.Cells["chkBox"].Value", если это какая-то другая строка, отличная от true/false, то она всегда будет выдавать исключение, если вы используете Convert.ToBoolean.

безопасный синтаксический анализ всегда является лучшей практикой, например boolean.tryparse, но все это зависит от типа получаемого значения, если значение всегда xyz, то вы всегда получите false во время синтаксического анализа.


Рейтинг:
0

OriginalGriff

Цитата:
Я попробовал була.Разбор и бул.TryParse но в обеих ситуациях бросается одно и то же исключение.
Нет, ты не знал. TryParse специально никогда не создает исключение - он всегда возвращает индикатор true / false, чтобы показать, было ли значение преобразовано или нет. Если ваш измененный код вызывает исключение с помощью TryParse, то это не та строка, которая, как вы думаете, вызывает проблему.

Проблема в том, что эта проблема связана с вашими данными, а также с вашим кодом, и у нас нет к нему доступа. Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Если вы не знаете, как его использовать, то быстрый Google для "Visual Studio debugger" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


CPallini

5.