0

ユーザーのサイトのインデックス ページに製品情報を表示するグリッドビューがあります。これを拡張して、ユーザーが製品をレビューした場合にチェックボックスをオンにできるようにしたいと考えています。

ただし、グリッドビュー テンプレートにチェック ボックス列を追加した後、複数回検索しようとすると、インデックス ページの Page_Load イベントが発生しなくなり、実行ツリーのさらに下にあるイベントの一部が初期化されたオブジェクトを必要とするため、問題が発生します。ページの読み込み時。

問題は、グリッドビュー内に asp 入力コントロールを配置すると、DataSources OnSelecting および OnSelected および Grids OnRowDataBound イベントの前に Page_Load が発生するのを何らかの形で妨げているようですが、理由がわかりません。

これが私のサンプルコードです。ここで何が間違っているのかわかりません。

インデックス.aspx.cs

private ProductSearch productSearch

protected void Page_Load(object sender, EventArgs e)
{
    productSearch = new ProductSearch(GetSearchParameters());
    productSearch.PageLoad()
}

protected void ProductsSelecting(object sender, ObjectDataSourceSelectingEventArgs e)
{
    e.InputParameters["searchParams"] = productSearch.GetSearchParams();
}

protected void ProductsSelected(object sender, ObjectDataSourceStatusEventArgs e)
{
    productSearch.SetExportToCsvButton();
}

protected void ProductsPageIndexChanging(object sender, GridViewPageEventArgs e)
{
    dgProducts.PageIndex = e.NewPageIndex;
}

protected void ProductsOnRowDataBound(object sender, GridViewRowEventArgs e)
{
    productSearch.ProductsRowDataBound(e.Row);
}

インデックス.aspx

<%@ Page Language="C#" MasterPageFile="~/Admin/AdminMaster.master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="Web.Admin.Index" %>
<asp:Content ContentPlaceHolderID="DataFrame" runat="server">
    <asp:GridView ID="dgProducts" runat="server" AllowPaging="True" AllowSorting="True" EnableViewState="False"
            AutoGenerateColumns="False" DataSourceID="dsProducts" PagerSettings-Position="TopAndBottom" DataKeyNames="ProductNo, KitID"
            OnPageIndexChanging="ProductsPageIndexChanging" OnRowDataBound="ProductsOnRowDataBound"
            EmptyDataText="There are no products matching your search." meta:resourcekey="dgProducts" onrowcreated="ProductsRowCreated">
        <HeaderStyle Font-Size="Small" />
        <Columns>
            <asp:TemplateField HeaderText="Reviewed">
                <ItemTemplate>                        
                    <asp:CheckBox runat="server" ID="chkReviewed" class="reviewedCheckbox" Checked="False" />                        
                </ItemTemplate>
            </asp:TemplateField>
        </Columns
    </asp:GridView>
    <asp:ObjectDataSource ID="dsProducts" runat="server" EnablePaging="True" SelectMethod="ProductAndKitSearchByParams"
            TypeName="ProductSearchController.ProductSearch" onselecting="ProductsSelecting" SortParameterName="SortParameter"
            SelectCountMethod="SelectVirtualCount" OnSelected="ProductsSelected">
        <SelectParameters>
            <asp:Parameter ConvertEmptyStringToNull="true" DefaultValue="" Name="searchParams" Type="Object" />
        </SelectParameters>
    </asp:ObjectDataSource>
</asp:Content>
4

1 に答える 1

0

マスター ページの contentplaceholderid を確認し、次のようにコンテンツ ページに指定します。

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server"></asp:Content>

また、コンテンツページのコードビハインドファイル名がページディレクティブで言及されているものと同じであることを確認してください。

于 2013-04-10T13:04:09.173 に答える