我有一个WinForms应用程序,它显示一个DataGridView。它从BindingSource自动填充,并包含多行数据。列包括字符串等标准内容。其中一些列是CheckBoxes。
Name | User | Admin
---- ---- -----
John | X |
Fred | | X
我正在使用TestStack.White编写一些自动化测试。我可以毫无问题地阅读CheckBoxes的现有状态。
如何设置或清除复选框? 我试过了:
Table.Rows[0].Cells[1].Value = true;
失败,因为在White可以回读当前值之前删除了基础行/单元格。
还有:
Table.Rows[0].Cells[1].SetValue(true);
无法设置新值。
答案 0 :(得分:1)
由于您的DataGridView
已绑定到BindingSource
,因此您应更改BindingSource
中的布尔值,而不是dataGridView
控件。
答案 1 :(得分:1)
由于TestStack.White
无法访问基础对象模型,因此您必须提供新按钮或重置按钮。或者某些GUI方式(使用逻辑)通过将BindingSource's
布尔字段设置为false来清除复选框值。
这是一些伪造的代码来说明。
private void New_Click(object sender, System.EventArgs e)
{
DataTable dt = (DataTable)dgv.DataSource;
dt[1]["IsAdmin"].value = false;
//In ASP.Net you also need a dgv.Bind(); //this is not necessary in winforms
}
您的系统中应该已经有一种方法可以使用清除的Checkbox进行测试,它应该与最终用户当前的操作方式一致。
答案 2 :(得分:0)
我这是设置价值观的有用方法吗? DataGridView checkbox column - value and functionality:
foreach (DataGridViewRow row in dataGridView1.Rows)
{
row.Cells[CheckBoxColumn1.Name].Value = true;
}
或者对象的Table
是什么?
答案 3 :(得分:0)
我相信c#中的复选框有一个属性' 已检查'。即使它在DataGridView中,我相信控件的属性保持不变。
那么,你可以试试吗
Table.Rows[0].Cells[1].Checked = true;
<强>资源强>: http://www.c-sharpcorner.com/uploadfile/mahesh/checkbox-in-C-Sharp3/
答案 4 :(得分:0)
我也无法从单元格或行中都提取不属于datagridviewcheckboxcolumn的复选框,最终导致鼠标被黑客入侵,如下所示:
Rect bounds = table.Rows[rowNo].Cells[colNo].Bounds;
Point center = new Point(bounds.X + bounds.Width / 2, bounds.Y + bounds.Height / 2);
Mouse.Instance.Click(center);