我正在将值从 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)
但再次显示相同的错误。我尝试了所有单元格索引都显示相同的错误
出现异常的原因是布尔值只能是
"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
,这样,如果您将来需要插入新列,用于访问值的代码不会变得无效。