これはばかげています。私はこれに5時間以上携わっていますが、なぜ私のおかしなコマンドが適切に実行されないのか理解できません。正しく起動するのは、組み込みコマンドの「編集」と「キャンセル」だけです。
マークアップ
<asp:ListView ID="NewProduct" runat="server" DataSourceID="NewProductSDS" DataKeyNames="ID">
<ItemTemplate>
<div>
<asp:LinkButton ID="accept" runat="server" CommandName="Accept" />
<asp:LinkButton ID="edit" runat="server" CommandName="Edit" />
<asp:LinkButton ID="delete" runat="server" CommandName="Reject" />
<%# Eval("Product")%>
</div>
</ItemTemplate>
<EditItemTemplate>
<div>
<asp:LinkButton ID="accept" runat="server" CommandName="Accept" />
<asp:LinkButton ID="cancel" runat="server" CommandName="Cancel" />
<asp:TextBox ID="NewProductName_tb" runat="server"></asp:TextBox>
</div>
</EditItemTemplate>
</asp:ListView>
<asp:SqlDataSource ID="NewProductSDS" runat="server"
ConnectionString="<%$ ConnectionStrings:myConnectionString %>"
SelectCommand="select ID, Product from Products">
</asp:SqlDataSource>
コードビハインド
Protected Sub ItemBind(ByVal sender As Object, ByVal e As ListViewItemEventArgs) Handles NewProduct.ItemDataBound
If e.Item.ItemType = ListViewItemType.DataItem Then
sender.DataKeys(e.Item.DataItemIndex).Value.ToString() 'get the datakey
'Display each key as it's created for troubleshooting.
Label1.Text += "bound: " + sender.DataKeys(e.Item.DataItemIndex).Value.ToString() + "<br />"
End If
End Sub
Protected Sub ItemClick(ByVal sender As Object, ByVal e As CommandEventArgs) Handles NewProduct.ItemCommand
'Check if an event fired when a LinkButton is clicked.
Label1.Text = "Command Event Fired"
If e.CommandName = "Accept" Then
Session.Add("PKey", sender.DataKeys(e.CommandArgument).Value.ToString)
Label1.Text = "Accept key " + Session.Item("PKey")
ElseIf e.CommandName = "Reject" Then
Session.Add("PKey", sender.DataKeys(e.CommandArgument).Value.ToString)
Label1.Text = "Reject key " + Session.Item("PKey")
End If
End Sub
このガベージをデバッグするために使用しているコードはこれだけです。私が理解できない最も奇妙なことは、すべてのキーが次のように新しいページの読み込みで表示されることです...
bound: 9
bound: 12
bound: 27
bound: 31
bound: 32
次に、組み込みのコマンド(この場合は[編集]または[キャンセル]をクリックすると、ItemCommand
イベントハンドラーコードに含まれていないことに注意してください)をクリックすると、このガベージが表示され、バインドする前にクリックが表示されていることがわかります。
Command Event Firedbound: 9
bound: 12
bound: 27
bound: 31
bound: 32
一体何が起こっていても、私が解決しようとしている問題は、私のカスタムコマンドが何らかの理由で認識されていないことです。何か案は?私は答えを高低で検索しましたが、何もありません:(
このすべてのコードを新しいプロジェクトにコピーした場合は、コンパイルする必要があります。私はあなたの助けにこれまでにとても感謝するでしょう。ListView
---点火順序について何かを明らかにし、おそらく何が悪いのかを理解することを期待して、コントロールのすべての異常なイベントを処理するためにバインドしようとしています。---:'(
更新:私はそれをやりました笑。興味深いですが、それが私に何か新しいことを教えてくれるかどうかはわかりません。すべてのイベントがバインドされた新しいページの読み込みで発生するものは次のとおりです。
Init
Load
DataBinding
ItemCreated
bound: 9
ItemCreated
bound: 12
ItemCreated
bound: 27
ItemCreated
bound: 31
ItemCreated
bound: 32
DataBound
PreRender