2011-09-20 34 views
2

これは他の多くの投稿のように聞こえることがわかりましたが、そのすべては私が読んだものの、私の問題を解決していません。ASP.NET ListViewコントロールがOnItemCommandイベントを起動しない

は、ここで私はリピータと同じデータソースにバインドされたListViewコントロールの両方を持っている

...シナリオです。各コントロールには、クリックしたときにOnItemCommandイベントを発生させるASP:LinkBut​​tonが含まれています。ページライフサイクルの同じ場所でEXACT同じデータに配線されており、ページと個々のコントロールに対してView Stateが有効になっていても、Repeaterはイベントを発生させるように見え、ListViewでは表示されません。

イベントハンドラの割り当て前にデータがバインドされていないと、イベントが発生しないことがわかります。私はViewStateを使用して、ページが転記されたときにコントロールを再投入します。要求を進めながらデバッグモードで各コントロールを見ると、Repeaterは実際にViewStateデータで再生成されているように見えますが、ListViewは表示されません。

これらはいずれも生成され、作成され、バインドされ、処理されるため、ほぼ確実に私はこの問題が発生する可能性があります。私はGridViewコントロールでも同様の問題に気付きました(イベントを発生させません)。私はこれらが何らかの形で関係していると思います。

GridViewとListViewには、Repeaterが組み込まれているページング機能ではないという共通点があります。実装されているかどうかにかかわらず、ViewStateのロードに影響するページングに何かがありますか?

OrderControl.ASCXは、ホスト・ページ/アプリケーションの特性(OrderListLV & OrderListRPT)としてリストビューとリピータを露出させる制御です。コントロールはViewStateがそれ自体を再構成する機会を持った後も、プリレンダリング段階でデータソースにバインドされる

<asp:ListView runat="server" id="lvOrderList" OnItemDataBound="lstOrderList_OnItemDataBound" EnableViewState="true" > 
    <LayoutTemplate> 
     <table class="tblGrid"> 
     <tr runat="server" id="itemPlaceholder" /> 
     </table> 
     <ASP:DataPager runat="server" ID="dataPager1" PageSize="3"> 
     <Fields> 
      <ASP:NextPreviousPagerField 
       ButtonType="Button" 
       ShowFirstPageButton="true" 
       ShowLastPageButton="true" 
       ShowNextPageButton="true" 
       ShowPreviousPageButton="true" /> 
     </Fields> 
     </ASP:DataPager> 
    </LayoutTemplate> 
    <ItemTemplate> 
     <tr class="row-"> 
      <td align="center"><ASP:LinkButton runat="server" id="lnkOrderId1" /></td> 
     </tr> 
    </ItemTemplate> 
    </asp:ListView> 


    <asp:Repeater runat="server" id="rptOrderList" OnItemDataBound="rptOrderList_ItemDataBound"> 
    <HeaderTemplate> 
     <table class="tblGrid"> 
    </HeaderTemplate> 
    <ItemTemplate> 
     <tr"> 
      <td align="center"><ASP:LinkButton runat="server" id="lnkOrderId" /></td> 
     </tr> 
    </ItemTemplate> 

    <FooterTemplate> 
     </table> 
    </FooterTemplate> 
    </asp:Repeater> 

OrderControl.ASCX.CSです。

protected override void OnPreRender(EventArgs e) 
    { 
     this.lstOrderList.DataSource = this.OrderHeaders.OrderByDescending(x => x.OrderDate).ToList(); 
     this.lstOrderList.DataBind(); 

     this.rptOrderList.DataSource = this.OrderHeaders.OrderByDescending(x => x.OrderDate).ToList(); 
     this.rptOrderList.DataBind(); 
    } 

Host.ASPX.CS制御を消費ページです。イベントハンドラをOnLoadハンドラのコントロールに直接接続します。結局のところ

protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 

     this.OrderControl.OrderListRPT.ItemCommand += new RepeaterCommandEventHandler(OrderList2_ItemCommand); 
     this.OrderControl.OrderListLV.ItemCommand  += new EventHandler<ListViewCommandEventArgs>(OrderList_ItemCommand); 

    } 

は言ったと私はリピータ火災のためのItemCommandハンドラを制御し、正しく実行しますが、プロセスもリストビューハンドラのハンドラを入力していない各LinkBut​​tonコントロールをクリックしたときに行われます。

私はこの問題に夢中です。私は誰かがこれについていくつかの考えを持っていることを望んでいる。何か私は少なくとも試すことができますか?

おかげで、 ゲイリー

答えて

0

あなたはCommandArgument最終的にも、リストビュー内の各LinkBut​​tonコントロールのCommandNameプロパティを設定する必要があります。

<td align="center"> 
    <asp:LinkButton runat="server" id="lnkOrderId1" CommandName="yourCommandName" CommandArgument="yourCommandArgument" /> 
</td> 

もここSOで質問をご確認ください新しい質問;-)

listview OnItemCommand dosen't fire up

+0

を投稿する前に私は間違いなく投稿する前に調査し、ポストあなたの参照を見ていくつかの時間を費やしました。コマンド引数はOnItemDataBoundハンドラに設定されています(この記事のコードをトリミングしている間、ListViewのOnItemDataBoundハンドラは省略されています)。また、CommandNameはRepeaterに設定されておらず、動作しています...私はもともとCommandNameをno availに設定しました。 –

+0

コマンド名属性を追加するための提案された投稿からの解決方法は、イベントハンドラ内でWHICHコマンドボタンが押されたと判断するのを可能にする貴重な点です。しかし、私が経験している問題は、プロセスがイベントハンドラに入ることがないということです。したがって、コマンド名を評価する機会は決してありません。これはまた、ListViewとGridViewがそうでないときにほぼ確実に実装されたRepeaterがなぜ機能するのかを説明していません。 –

関連する問題