3

我有一个带有数组列表的 ICollection 类 LabCollection。这个数组列表包含另一个类 LabEntity.LabEntity 具有属性 LabID、LabName 等

我将 collection 类绑定到 gridview

LabCollection objLabCollection=new LabCollection();

gridview.datasource=objlabCollection
gridview.databind();

在绑定到具有特定 LabName 的网格之前,我必须先填充类。我试试这个

BindingSource bs = new BindingSource();
bs.DataSource=objlabCollection
bs.Filter = "LabName='CPT'";

gridview.DataSource = bs;
gridview.DataBind();

如何做到这一点?

4

2 回答 2

1

当然,正如 naveen 所回答的,您需要用户定义的方法来操作用户定义的数据。

public IList<LabEntity> GetAllEntities(string filterStr)
{
   var entity=from ds in datasource where ds.labName==filterStr select ds;
   return entity.ToList();
}

其中datasource是您的数组列表,它也是元素列表或元素数组或您想要说明的任何内容。

此外,将返回类型作为接口而不是具体的类类型是一个好习惯。

于 2012-11-12T03:49:44.907 回答
1

你有两个班级LabCollectionLabEntity. LabCollection包含一个ArrayList现在。

一个更好的方法是LabCollection像这样改变类。(我宁愿命名LabCollectionManager

public class LabCollectionManager()
{

    //.................

    public List<LabEntity> GetAllLabEntities()
    {
        //method that generates a generic list of LabEntity 
    }

    public List<LabEntity> GetLabEntitiesByLabName(string labName)
    {
        return GetAllLabEntities().Where(le => le.LabName == labName).ToList();
    }

    //.................

}

现在像这样在代码隐藏中调用它

var labManager = new LabCollectionManager();
gridview.DataSource = labManager.GetLabEntitiesByLabName("CPT");
gridview.DataBind();

更新:

如果您想坚持使用 ArrayList,请像这样更改您的函数

public class LabCollectionManager()
{

    //.................

    public ArrayList GetAllLabEntities()
    {
        //method that generates a generic list of LabEntity 
    }

    public ArrayList GetLabEntitiesByLabName(string labName)
    {
        var completeList = GetAllLabEntities();
        var filteredList = new ArrayList(completeList.Cast<LabEntity>()
                                    .Where(le => le.LabName == labName)
                                    ToList());
        return filteredList;
    }

    //.................

}

PS:不是很优化,但这将帮助您入门。

于 2012-11-12T03:15:29.000 回答