在分页显示的页面,使用gridview显示分页之后的数据,数据源是datatable,开始的时候有的列使用的绑定列,直接绑定datatable的列名,例如:<asp:BoundField DataField="zw" HeaderText ="职务" />,
因为要用户可以调整显示的列,我就做了一个checkboxlist,用户可以选择显示的列,然后我在绑定数据gridview.databind()之后,根据checkboxlist的选中列,显示和隐藏gridview的列,选中列的序号先保存在一个hiddenfield.Value中。
刚开始用<asp:BoundField DataField="zw" HeaderText ="职务" />的时候,选中一个绑定列作为显示列,点击【确定】之后,虽然这个列被设置了this.gvStudent.Columns[i].Visible = true;,但是第一次点击【确定】,这个列的值是空白的,什么都没有,再次点击【确定】,这个列的值就出来了,目前还不知道原因。
后来经过仔细的调试,一个一个列的选择,看看那些列会出现这个问题。结果是,如果使用的是绑定列绑定数据,就会出现这个问题;如果使用的是模板列,就不会出现这个问题。
然后将绑定列都改为模板列,<asp:TemplateField HeaderText="职务">
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Eval("zw") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label8" runat="server" Text='<%# Eval("zw") %>'></asp:Label>
</ItemTemplate>
<ControlStyle CssClass="StudentDetailsTableDataControl4" />
<ItemStyle CssClass="StudentDetailsTableDataItem4" />
</asp:TemplateField>
,这个问题就被解决了,目前不知道为什么。