【发布时间】:2021-02-24 22:48:51
【问题描述】:
我在 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());
}
}
【问题讨论】:
-
您可能能够将 Cell 转换为 DataGridViewCheckBoxCell 但几乎没有它的 Value - 您还应该在最后一行添加一对括号代码:
chk = (bool)(row.Cells["VerificationStatus"].Value); -
但是你是对的,当只是将值转换为 bool 时,它会给我一个“指定的转换无效”错误。我更改了我原来的帖子以反映这一点。
-
演员表总是指非常下一个实体,这里它应该是值,但在你的代码中它是
row。改为chk = (bool)(row.Cells["VerificationStatus"].Value); -
添加了括号并得到了同样的错误。我只是不明白。
-
值是
==DbNull.Value吗?
标签: c# winforms datagridview