看到标题可能就能想到要要说的是什么了
之前在做一个项目的首页,情况是首页上的东西都是一块块的。所以我就吧一小块给提取出来做成了用户控件。这样在需要的地方直接拿过来就可以了。
首页做完之后有个问题就是,反映很慢。想来想去是访问数据库的次数太多。于是想办法一次吧所有需要的数据都取出来。 这个简单。但是要怎么在用户控件中获得这些数据呢。
我用了最简单的方法。用户控件中有一个属性Page ,哈哈。明白了吧 。直接那到page 强转成需要的Page对象。就可以取得里面的数据了。但是这里取出来的是所有的数据不一定就是当前控件所需要的数据。
给数据做一个简单的过滤就可以了下面 附上关键代码 主要看个思路
protected int liantype1; public string Country { get; set; } protected string sname; protected string LianBei = "lianindex"; protected void Page_Load(object sender, EventArgs e) { List<SaishiModel> ss = ((Index)this.Page).saishi.FindAll(GetSaishi);//取数据 RepLiansaiBeisai.DataSource = ss; if (ss.Count > 0) liantype1 = ss[0].LiansaiType; RepLiansaiBeisai.DataBind(); } protected void RepLiansaiBeisai_ItemDataBound(object sender, RepeaterItemEventArgs e) { ListItemType t = e.Item.ItemType; if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { Repeater rep = (Repeater)e.Item.FindControl("RepSaiji"); SaishiModel dataItem = (SaishiModel)e.Item.DataItem; sname = dataItem.Sname; rep.DataSource = ((Index)this.Page).saiji.FindAll(GetSaiji); rep.DataBind(); } } //过滤方法 private bool GetSaishi(SaishiModel saishi) { return saishi.Area == Country; } private bool GetSaiji(LiansaiModel saiji) { return saiji.SName == this.sname; }
这里的过滤是通过 list 集合的FindAll 方法 原来可以用 拉姆达 表达式的可是悲剧的我还是2.0 写了两委托
这里在附上一个我原来的做法 page中的数据是table
过滤table 无非就是遍历table 然后弄个新的tabl出来 这里主要是没有从新构建datarow
DataTable totalTable = ((Index)this.Page).saishi DataTable dtsource = totalTable.Clone(); foreach (DataRow row in totalTable.Rows) { if (row["name"].ToString() == country) { dtsource.Rows.Add(row.ItemArray); } } return dtsource;
虽然简单 我相信一定有人用的上