今天Kevin问我为什么下面的代码生成的GridView为何不分页?
<asp:GridView ID="gv" runat="server" AutoGenerateColumns="False" PageSize="10" DataKeyNames="id" AllowPaging="true" OnPageIndexChanging="PageIndexChanging">
顿时一愣,这个问题是如此眼熟,以至于还能记得以前经常遇到这个问题每次都要想上半天,而且还记得是一个很幼稚的错误引起。却一时半会想不起来。这种情况确实令人郁闷,却经常发生-_-。
幸运的是经过5分钟的绞尽脑汁,终于想起来原因,遂记录下来,以备查询:
Asp.net从2.0开始支持theme,如果设置了一个globalSkin,那么所有的page都会应用这个theme。而GridView的分页属性是可以在theme里设定的。这时会覆盖掉aspx文件中定义的属性。
例如:我在app_thems/GlobalSkin/GridView.skin就定义了所有GridView的默认外观(包括分页)。
<asp:GridView runat="server" CellPadding=5 ForeColor="#333333" BorderWidth="1px" BorderColor="#dddddd" PageSize=20>
<FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
</asp:GridView>
这里的PageSize="20"就覆盖了控件定义里设置的PageSize="10",这就造就了GridView不能分页的假象,实际上如果数据量超过20还是会分页的。解决办法一是不在theme里定义PageSize,二是在控件或者页面的配置中设置EnableTheming="false"。
之前ibm之旅怎么样?
体验一般