简单数据绑定到gridview列

时间:2009-06-11 23:04:24

标签: asp.net data-binding

我有一个GridView,用于向用户显示搜索结果。我想让他们在执行搜索时选择在GridView上显示哪些列。很简单,是吗?我想尝试使用只是数据绑定,没有事件。不幸的是,我的代码无法使用绑定到列的Visible属性的复选框更新GridView。 chechboxes的状态发生了变化,但列的Visible属性没有变化。

Search.aspx 的摘录:

<myControl:FacultyGridView ID="FacultyGridView1" runat="server" />
    <asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
    <asp:CheckBox ID="CheckBox1" runat="server" Text='<%# Eval("HeaderText") %>' Checked='<%# Bind("Visible") %>' AutoPostBack=true/></ItemTemplate>
</asp:Repeater>

Search.aspx.cs

中的代码隐藏代码段
protected void Page_Load(object sender, EventArgs e)
{
     Repeater1.DataSource = FacultyGridView1.GridView.Columns;
     Repeater1.DataBind();
}

要清楚,GridView是作为名为FacultyGridView的用户控件的公共属性公开的。 FacultyGridView.ascx

的相关摘要
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
    AllowPaging="True" AllowSorting="True" PageSize="25">
    <PagerSettings Mode="NumericFirstLast" Position="TopAndBottom" />
    <Columns>
        <asp:BoundField DataField="Name" HeaderText="Name" ReadOnly="True" SortExpression="Name" />
        <asp:TemplateField HeaderText="University" SortExpression="UniversityID">
            <ItemTemplate>
                <asp:Label ID="Label1" runat="server" Text='<%# Eval("University.Name") %>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Division">
            <ItemTemplate>
                <asp:Repeater ID="Repeater1" runat="server" DataSource='<%# Eval("DivisionMemberships") %>'>
                    <ItemTemplate>
                        <asp:Label ID="Label2" runat="server" Text='<%# Eval("Division.Name") %>'></asp:Label>
                    </ItemTemplate>
                </asp:Repeater>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Title" HeaderText="Title" ReadOnly="True" SortExpression="Title" />
        <asp:TemplateField HeaderText="Research Type">
            <ItemTemplate>
                <asp:Repeater ID="Repeater1" runat="server" DataSource='<%# Eval("ResearchTypeMappings") %>'>
                    <ItemTemplate>
                        <asp:Label ID="Label1" runat="server" Text='<%# Eval("ResearchType.Name") %>'></asp:Label>
                    </ItemTemplate>
                </asp:Repeater>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Expertise" HeaderText="Expertise" ReadOnly="True" SortExpression="Expertise" />
        <asp:HyperLinkField DataNavigateUrlFields="Website" DataTextField="Website" HeaderText="Website"
            SortExpression="Website" />
        <asp:BoundField DataField="Phone" HeaderText="Phone" ReadOnly="True" SortExpression="Phone" />
        <asp:TemplateField HeaderText="Email Address" SortExpression="EmailAddress">
            <ItemTemplate>
                <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("EmailAddress", "mailto:{0}") %>'
                    Text='<%# Eval("EmailAddress") %>'></asp:HyperLink>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

最后,我应该提到GridView是由页面上的Button绑定的,但是我没有获得Visible属性的更新,无论我是在数据绑定之前还是之后使用复选框。此外,当使用if(!IsPostBack)绑定第一个Page_Load()上的转发器 时,我还没有看到我想要的行为,也没有使用Checkbox.AutoPostback true或false。关于我做错了什么的任何线索?我希望它很简单,但我在这里有点绿。

作为一个注释:我知道如何通过事件轻松完成这项工作,但我希望通过数据绑定作为学习练习。

1 个答案:

答案 0 :(得分:0)

可能是因为每次网格绑定到数据时,列&amp;重新创建设置(没有更改)。