将List用作DataGridView的数据源是否安全?

时间:2013-12-05 14:08:54

标签: c# winforms datagridview datatable bindingsource

我正在创建一个C#类库,它从套接字读取数据并将一些数据存储在列表中。在执行期间,此列表将每秒更改一次。

需要此列表作为winforms应用程序的dataGridView的内容,但我想知道如何将其从我的库中公开。

在classLibrary中将List声明为public是否安全,如:

public class THRManager
{
    public List <GaugeItem> outSource;
    ...

然后在WinForm方面:

public TMRMainForm()
{
    THRManager thrC = new THRManager();
    dataGridView1.DataSource = thrC.outSource;
    ...

这样安全吗?如果没有,最好的方法是什么?

THX!

================== EDIT

我应该使用DataTable还是BindingSource?

2 个答案:

答案 0 :(得分:2)

使用ReadOnlyCollection但在构造函数中创建一次或在其他任何需要它的位置创建它,以便每次访问时都不new ReadOnlyCollection...

public class THRManager
{
   private List<GaugeItem> outsource;
   private ReadOnlyCollection<GaugeItem> outSourceReadOnly;

    public THRManager()
    {
        outSource = new List<GaugeItem>();
        outSourceReadOnly = new ReadOnlyCollection<GaugeItem>(outSource);
    }

    public ReadOnlyCollection<GaugeItem> OutSource 
    { 
        get { return outSourceReadOnly; } 
    }
}

希望代码没有语法错误:)

答案 1 :(得分:1)

发布内部集合时,这是一个更安全的选项。

private List<GaugeItem> outSource;

public ReadOnlyCollection<GaugeItem> OutSource 
{ 
    get { return new ReadOnlyCollection<GaugeItem>(outSource); } 
}