c# - DataGridView 中的 CheckBox 值始终为 true
问题描述
我有一个 WinForm 应用程序,它具有 DataGridView,其中一列带有 CheckBox。用复选框选择几行后,我需要迭代行并检查 CheckBox 是否被勾选。
我已经尝试过 for 和 foreach 循环,但每次 bx 的值都是真的!有趣的是,我有一个按钮可以选择所有按钮,另一个按钮使用代码清除所有按钮,而且它可以工作!
我创建 DataGridView 的代码:
ComputerSelection computerSelection = new ComputerSelection();
DataGridViewCheckBoxColumn checkBox = new DataGridViewCheckBoxColumn();
checkBox.ValueType = typeof(bool);
checkBox.Name = "CheckBox";
checkBox.HeaderText = "Select";
computerSelection.compGridView.Columns.Add(checkBox);
computerSelection.compGridView.Columns.Add("Name", "Name");
computerSelection.compGridView.Columns.Add("AgentVersion", "Agent Version");
computerSelection.compGridView.Columns.Add("Status", "Status");
computerSelection.compGridView.Columns.Add("Domain", "Domain");
迭代代码(我搜索的大多数帖子都将该解决方案共享为正确的):
foreach (DataGridViewRow row in computerSelection.compGridView.Rows)
{
if ((bool)row.Cells["CheckBox"].Value)
{
computerSelection.ComputersList.Add(row.Cells[1].Value.ToString());
}
}
即使在未选中的复选框上,此代码也始终返回 TRUE。我在 StackOverFlow 上搜索了很多帖子,甚至尝试使用 as DataGridViewCheckBoxCell 但没有成功。
选择所有按钮代码(使用相同的机制:():
private void SelectAllButton_Click(object sender, EventArgs e)
{
for (int i = 0; i < compGridView.Rows.Count; i++)
{
compGridView.Rows[i].Cells[0].Value = true;
}
}
我需要在每次迭代后“row.Cells[1].Value.ToString()”代码将返回 false 或 true,并不总是 true。
解决方案
您需要找到您的控件并将其转换为复选框对象并查看它是否被选中。该Checked
属性是复选框存储是否选中的真/假值的地方。现在你只是在检查一个单元格的数据,看看它是否有任何值,并且每次都返回 true。我在下面执行的方式是您将如何使用 ASP.NET Webforms GridView 对象执行此操作。我认为这与 Windows 窗体的想法基本相同,只是 DataGridView 可能具有与FindControl
您在 ASP.NET Webforms 中用于 GridView 的方法不同的“查找控件”方法。但我敢打赌它可能是一样的。
我出去玩了,不能用 Windows 窗体测试这个确切的功能,但是你需要做什么来使你的逻辑工作背后的想法是完全相同的。
将您的条件更改为以下内容:
foreach (DataGridViewRow row in computerSelection.compGridView.Rows)
{
// Don't cast as bool. Convert to Checkbox object and see if it is checked.
if (((CheckBox)row.FindControl("CheckBox")).Checked) // row.FindControl might be different but might be the same for Winforms.
{
computerSelection.ComputersList.Add(row.Cells[1].Value.ToString());
}
}
推荐阅读
- sql - 创建 A 列的计数以按 B 列分配
- loops - 在循环外注册 xll 插件
- r - 从一个数据框列表中设置 colnames 以匹配另一个数据框列表
- python - Python Beautifulsoup 获取标签下的文本
- html - 有没有办法将 change.org 请愿嵌入网页?
- java - 我正在使用源和目标打印每个边缘,但是当我在 mxgraph java 中使用 getEdgeCount() 时它们会重复
- web - Web界面有通用术语吗?
- javascript - 我不明白,为什么我的 CalculateTotal() 函数返回“Null”?
- python - 如何从 python 的列表中删除 json 键?
- heroku - 推送被拒绝,Python App 失败到 Heroku