2015-07-10 108 views
-1

我有一个中继器控制将绑定页面加载的内容。枚举通过数据源

repeater.DataSource = Build<Model>(query); 
repeater.DataBind(); 

!!重要说明:为简洁起见,代码已被缩小。

Build<Model>将建立数据库中的数据,这将返回到DataSource,我绑定所以它在页面上可见的IEnumerable

在前端我有一个按钮来触发通过DataSource的搜索以重新结合过滤结果。

有没有可能做一些事情:

IEnumerable<...> enumerator = repeater.DataSource.GetEnumerator(); 

类似的规定?这样,我可以循环浏览内容,然后重新筛选一个过滤列表?

回答

0

将数据源存储为稍后访问的字段可能更容易。

public class MyForm 
{ 
    private MyDataSourceType myDataSource = null; 

    private void SetDataModel() 
    { 
     myDataSource = Build<Model>(query); 
     repeater.DataSource = myDataSource 
     repeater.DataBind(); 
    } 

    private void FilterDataSet() 
    { 
     IEnumerable<MyDataType> enumerated = myDataSource.GetEnumerator(); 
     var filteredDataSource; // Filter Logic here 
     repeater.DataSource = filteredDataSource; 
     repeater.DataBind(); 
    } 
} 

请记住,这是基于您非常简短的代码片段的伪代码。

编辑: 要使用数据源的工作,你可以试试这个:

private void FilterDataSet() 
    { 
     List<MyDataType> myDataSource = repeater.DataSource as List<MyDataType>; 
     // Null check here 
     IEnumerable<MyDataType> enumerated = myDataSource.GetEnumerator(); 
     var filteredDataSource; // Filter Logic here 
     repeater.DataSource = filteredDataSource; 
     repeater.DataBind(); 
    } 

这将需要repeater.DataSource(对象的类型),并尝试投放到列表(或任何其他它是)。做一个空检查,然后GetEnumerator()并过滤掉。

+0

我在想,但认为访问数据源会更干净。 – Greg

+0

检查我的编辑如何可以工作。 –