想要将列表中的某些项添加到DataSource

时间:2015-03-10 20:22:04

标签: c# datagridview bindingsource

简要介绍

程序在机器上运行测试。然后出现一个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,这就是为什么我认为绑定列表会工作得最好

我想知道是否有一种快速的方法可以做到这一点,或者我是否只需做一堆循环。

1 个答案:

答案 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;
    }
}

确保保存更改。