Warum wurde der GridView-Code in einen Ascx verschoben, wenn die Ausnahme "Datenbindungsausdrücke werden nur für Objekte mit einem DataBinding-Ereignis unterstützt" angegeben wurde?

Ich habe eine GridView im Code mit einer DataTable als Datenquelle erstellt, was gut funktioniert hat. Ich habe die GridView-Erstellung jetzt in eine .ascx-Datei verschoben, um die Formatierung zu vereinfachen.

Aus irgendeinem Grund hat dies begonnen, die HttpParseException auszulösen:

Databinding-Ausdrücke werden nur für Objekte mit einem DataBinding-Ereignis unterstützt. System.Web.UI.WebControls.HyperLinkField hat kein DataBinding-Ereignis.

Was wurde geändert, um diesen Unterschied zu verursachen, und wie kann ich ihn beheben?

Ursprünglicher Code:

// Set up columns for datagrid
var boundField = new HyperLinkField
                    {
                        HeaderText = "Title",
                        DataTextField = MembershipCollection.WebTitleColumnName,
                        DataNavigateUrlFields = new[] { MembershipCollection.WebUrlColumnName },
                        DataNavigateUrlFormatString = "{0}"
                    };

// Set up datagrid
_sitesList = new GridView
                {
                    AutoGenerateColumns = false,
                    AllowPaging = true,
                    PageSize = PageSize,
                    EmptyDataText = "No results",
                    Width = new Unit(100, UnitType.Percentage),
                    CellPadding = 2,
                    PagerSettings =
                        {
                            Visible = true,
                            Mode = PagerButtons.NextPrevious,
                            Position = PagerPosition.Bottom,
                            NextPageText = "Next >",
                            PreviousPageText = "< Previous"
                        }
                };
_sitesList.PagerStyle.HorizontalAlign = HorizontalAlign.Center;
_sitesList.RowDataBound += GridView_RowDataBound;
_sitesList.PageIndexChanging += GridView_PageIndexChanging;
_sitesList.Columns.Add(boundField);

.ascx code:

<asp:ObjectDataSource ID="_sitesDataSource" runat="server"
    SelectMethod="GetSites"
    TypeName="System.Data.DataTable" />
<asp:GridView ID="_sitesGridView" runat="server"
    AutoGenerateColumns="false"
    AllowPaging="true"
    PageSize="<%# this.PageSize %>"
    EmptyDataText="No results"
    width="100%"
    DataSourceID="_sitesDataSource"
    OnRowDataBound="GridView_RowDataBound"
    OnPageIndexChanging="GridView_PageIndexChanging">
    <PagerSettings Visible="true" Mode="NextPrevious" Position="Bottom" NextPageText="Next >" PreviousPageText="< Previous" />
    <PagerStyle HorizontalAlign="Center" />
    <Columns>
        <asp:HyperlinkField
            HeaderText="Title"
            DataTextField="<%# MembershipCollection.WebTitleColumnName %>"
            DataNavigateUrlFields="<%# MembershipCollection.WebUrlColumnName %>"
            DataNavigateUrlFormatString="{0}" />
    </Columns>
</asp:GridView>

Antworten auf die Frage(2)

Ihre Antwort auf die Frage