简要介绍
程序在机器上运行测试。然后出现一个dialogBox,询问用户所有机器是否正常工作。如果他们说没有出现另一个窗口,dataGridView通过checkBox方法询问哪些机器失败了。然后,将状态设置为ERROR状态,以便程序可以继续运行,同时忽略有错误的计算机。
我的这个类有两个属性
public class ASM
{
public byte DeviceID
public ASMStatus Status
}
我把它放在一个列表中
list<ASM001.ASM> ASMs = new list();
现在我想将此列表添加到dataGridView中的bindingSource,但只有那些状态等于ASMStatus.IDLE
的
我想过只创建那些空闲到另一个列表并将其附加到绑定列表的文件,但是,dataGridView还有一个checkBox列,用于确定状态是否需要更改为ASMStatus.ERROR
public partial class FailedMessageBox : Form
{
public FailedMessageBox()
{
InitializeComponent();
DataGridViewCheckBoxColumn col1 = new DataGridViewCheckBoxColumn();
col1.HeaderText = "Device Failed";
dataGridView1.Columns.Add(col1);
}
private void FailedMessageBox_Load(object sender, EventArgs e)
{
dataGridView1.DataSource = Global.ASMs;
}
}
我想确保当用户点击OK时,列表中的当前ASM设置为ERROR,这就是为什么我认为绑定列表会工作得最好
我想知道是否有一种快速的方法可以做到这一点,或者我是否只需做一堆循环。
答案 0 :(得分:0)
你的Page_load中有类似的内容:
using(var context = new DbContext())
{
// You could put a Where Clause here to limit the returns
// i.e. context.ASMs.Where(s => s.Status == ASMStatus.IDLE).Load()
context.ASMs.Load();
var data = context.ASMs.Local.ToBindingList();
var bs = new BindingSource();
bs.DataSource = data;
dataGridView1.DataSource = bs;
}
您应该直接向页面添加BindingSource,但我只是在代码中添加它。然后你可以像这样访问它:
foreach(DataRow row in dataGridView1.Rows)
{
if ((bool) row.Cells["Device Failed"].Value == true)
{
var line = row.DataBoundItem();
line.Status = ASMStatus.ERROR;
}
}
确保保存更改。