枚举数据源

时间:2015-07-10 18:56:32

标签: c# web webforms

我有一个 Repeater Control ,它将绑定页面加载的内容。

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

!!重要提示:为简洁起见,代码已缩小。

Build<Model>将从数据库中构建IEnumerable个数据,这些数据将返回到DataSource,我将其绑定,以便在页面上显示。

在前端,我有一个按钮,可以通过DataSource触发搜索,并使用过滤后的结果进行重新绑定。

是否可以做某事:

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

这些方面的东西?这样我可以在使用过滤列表重新绑定之前循环遍历内容吗?

1 个答案:

答案 0 :(得分: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();
   }
}

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

编辑: 要使用DataSource,您可以尝试:

   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(Object的类型)并尝试强制转换为List(或其他任何东西)。执行空检查,然后GetEnumerator()并过滤掉。