字符串未被识别为有效的布尔值

问题描述 投票:0回答:1

我正在将值从 Gridview 传递到另一个表单

传递值的类

public class CommonValues
{
    public string MRNO { get; set; }
}

以及我从中传递值的表单

 public partial class showmr : Form
 {
    List<int> truIndexes = new List<int>();
    private pendingrequest _masterForm;
 }

 public showmr(pendingrequest masterForm)
 {
     InitializeComponent();
  
     _masterForm = masterForm;
 }

 pendingrequest frm;

 private void button1_Click(object sender, EventArgs e)
 {
    try
    {
        List<CommonValues> CVV = new List<CommonValues>();

        foreach (DataGridViewRow item in dataGridView1.Rows)
        {
            if (Convert.ToBoolean(item.Cells[6].Value))
            {
                CVV.Add(new CommonValues
                {
                    MRNO = item.Cells[6].Value,
                });
            }
            else
            {
            }
        }

        if (CVV.Count > 0)
        {
            _masterForm.AddToGrid(CVV);
            MessageBox.Show(CVV.ToString());
            this.Close();
        }
        else
        {
            MessageBox.Show("Quantity shouldn't be empty");
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

它抛出异常,因为字符串不是有效的布尔值:

在此输入图片描述

我尝试使用

TryParse
,但它也显示错误。

if (Boolean.TryParse(item.Cells[6].Value)) = true;

我只是传递一个值。我将所有 sqlite 列定义为

VACHAR(80)
但再次显示相同的错误。我尝试了所有单元格索引都显示相同的错误

c# visual-studio gridview
1个回答
0
投票

出现异常的原因是布尔值只能是

"True"
"False"
。 这是有效的:

bool a = Convert.ToBoolean("True");
bool b = Convert.ToBoolean("False");

这是NOT有效(

"MR1236564"
无法转换为bool类型):

bool c = Convert.ToBoolean("MR1236564");

您是否想检查

item.Cells[6].Value
是否包含值?如果是这样,请进行
null
检查:

if(item.Cells[6].Value == null)
{
    // ...
}

如果您从数据库中获取数据,我相信

Value
也可能是
DBNull.Value
:

if(item.Cells[6].Value == DBNull.Value)
{
    // ...
}

作为旁注,我建议使用

item.Cells[6].Value
,而不是使用
item.Cells["<your column name>"].Value
,这样,如果您将来需要插入新列,用于访问值的代码不会变得无效。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.