无法从 DataGridViewCheckBoxColumn 获取检查值。无法将单元格值转换为 bool C#
Cannot get check value from DataGridViewCheckBoxColumn. Cannot cast cell value to bool C#
我在 DataGridView 中有一个 DataGridViewCheckBoxColumn,用户可以在其中检查以验证项目。要检查一个项目是否已经过验证,我使用这个:
private void paymentsTbl_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
DataGridViewRow row = paymentsTbl.Rows[e.RowIndex];
bool chk = (bool)row.Cells["VerificationStatus"].Value;
if (chk == true)
{
row.ReadOnly = true;
}
}
这会在添加一行时触发,并且只有在某些内容已经过验证时才使该行变为可读。这行得通。所以现在,用户单击一个按钮,然后我想通过 datagridview 查看所有用户检查的内容。
private void verifyBtn_Click(object sender, EventArgs e) {
bool chk;
foreach(DataGridViewRow row in paymentsTbl.Rows)
{
if(row.ReadOnly == false)
{
chk = (bool)row.Cells["VerificationStatus"].Value;
if (chk)
{
//Do Something
}
}
}
}
这不起作用。它给我一个错误:指定的转换无效。在线:
chk = (bool)row.Cells["VerificationStatus"].Value;
我一直在研究我做错了什么,但我一直在关注在线示例并得到相同的结果。有人能告诉我第一个代码如何完美运行而第二个代码却不能吗?
编辑:这是将行添加到 DGV 的方式,其中“验证”和“惩罚”都是复选框列:
using (SqlDataReader Read = Com.ExecuteReader())
{
while (Read.Read())
{
if (Read["VerificationStatus"].ToString() == "VERIFIED")
{
verify = true;
}
else
{
verify = false;
}
if (Read["Penalty"].ToString() == "Y")
{
penalty = true;
}
else
{
penalty = false;
}
paymentsTbl.Rows.Add(Read["PaymentID"].ToString(), Read["PrimaryHolder"].ToString(), Read["CertificateNum"].ToString(), Read["IntStartDate"].ToString(), Read["IntEndDate"].ToString(),
Read["PaymentAmount"].ToString(), Read["RoundedInterest"].ToString(), verify, penalty, Read["PenaltyAmt"].ToString(), Read["TotalPaid"].ToString());
}
}
您将 chk
声明为 DataGridViewCheckBoxCell
,然后尝试为其分配 bool
类型。您只需要将值放入 bool 并检查:
foreach(DataGridViewRow row in paymentsTbl.Rows)
{
if(row.ReadOnly == false)
{
bool chk = (bool)row.Cells["VerificationStatus"].Value;
if (chk)
{
//Do Something
}
}
}
所以...我不知道为什么会发生此错误,但我意识到该值仍给出“真”值,因此我将其更改为 row.Cells[" VerificationStatus"].Value.ToString();并使 if (chk == "true") 起作用。去图吧。
我在 DataGridView 中有一个 DataGridViewCheckBoxColumn,用户可以在其中检查以验证项目。要检查一个项目是否已经过验证,我使用这个:
private void paymentsTbl_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
{
DataGridViewRow row = paymentsTbl.Rows[e.RowIndex];
bool chk = (bool)row.Cells["VerificationStatus"].Value;
if (chk == true)
{
row.ReadOnly = true;
}
}
这会在添加一行时触发,并且只有在某些内容已经过验证时才使该行变为可读。这行得通。所以现在,用户单击一个按钮,然后我想通过 datagridview 查看所有用户检查的内容。
private void verifyBtn_Click(object sender, EventArgs e) {
bool chk;
foreach(DataGridViewRow row in paymentsTbl.Rows)
{
if(row.ReadOnly == false)
{
chk = (bool)row.Cells["VerificationStatus"].Value;
if (chk)
{
//Do Something
}
}
}
}
这不起作用。它给我一个错误:指定的转换无效。在线:
chk = (bool)row.Cells["VerificationStatus"].Value;
我一直在研究我做错了什么,但我一直在关注在线示例并得到相同的结果。有人能告诉我第一个代码如何完美运行而第二个代码却不能吗?
编辑:这是将行添加到 DGV 的方式,其中“验证”和“惩罚”都是复选框列:
using (SqlDataReader Read = Com.ExecuteReader())
{
while (Read.Read())
{
if (Read["VerificationStatus"].ToString() == "VERIFIED")
{
verify = true;
}
else
{
verify = false;
}
if (Read["Penalty"].ToString() == "Y")
{
penalty = true;
}
else
{
penalty = false;
}
paymentsTbl.Rows.Add(Read["PaymentID"].ToString(), Read["PrimaryHolder"].ToString(), Read["CertificateNum"].ToString(), Read["IntStartDate"].ToString(), Read["IntEndDate"].ToString(),
Read["PaymentAmount"].ToString(), Read["RoundedInterest"].ToString(), verify, penalty, Read["PenaltyAmt"].ToString(), Read["TotalPaid"].ToString());
}
}
您将 chk
声明为 DataGridViewCheckBoxCell
,然后尝试为其分配 bool
类型。您只需要将值放入 bool 并检查:
foreach(DataGridViewRow row in paymentsTbl.Rows)
{
if(row.ReadOnly == false)
{
bool chk = (bool)row.Cells["VerificationStatus"].Value;
if (chk)
{
//Do Something
}
}
}
所以...我不知道为什么会发生此错误,但我意识到该值仍给出“真”值,因此我将其更改为 row.Cells[" VerificationStatus"].Value.ToString();并使 if (chk == "true") 起作用。去图吧。