私は、方法から引き出されたIEnumerable<MyDocument>
DataSource
を持つListView
を持っています。カスタムデータソースを使用してListViewからアイテムを削除するにはどうすればよいですか?
文書が実際に削除されるため、myDocsList_ItemCommand()
のコードが確実に実行されます。私の問題は、myDocsList.Items.Remove(dataItem)
のコードを持っていても、ListView
は次のページが更新されるまで(今削除された)文書を表示しているということです。
単純化した.ascxは基本的には次のとおりです。
<asp:ListView id="myDocsList" runat="server"
OnItemDataBound="myDocsList_ItemDataBound"
OnItemDeleting="myDocsList_ItemDeleting"
OnItemCommand="myDocsList_ItemCommand">
<LayoutTemplate>
<table>
<asp:Placeholder id="itemPlaceholder" runat="server" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr><td>
<asp:LinkButton
ID="delete" runat="server"
CommandName="Delete" CommandArgument="X"
OnClientClick="javascript:return confirm('...');">
Delete
</asp:LinkButton>
</td></tr>
</ItemTemplate>
</asp:ListView>
簡略化.ascx.csは基本的には次のとおりです。私は、ASPページのライフサイクルと、それに関連するいくつかの質問にまで読んできた
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Page_PreRender(object sender, EventArgs e)
{
if (!IsPostBack)
{
IEnumerable<MyDocument> docs = getDocuments();
myDocsList.DataSource = docs;
myDocsList.DataBind();
}
}
/* so we have the ID of the document we're deleting later on */
protected void myDocsList_ItemDataBound(object sender,
ListViewItemEventArgs e)
{
var deleteButton =
(LinkButton) ((Control) e.Item).FindControl("delete");
deleteButton.CommandArgument =
((MyDocument) e.Item.DataItem).id.ToString();
}
/* or we get "raised event ItemDeleting which wasn't handled" */
protected void myDocsList_ItemDeleting(Object sender,
ListViewDeleteEventArgs e)
{
}
/* do something here? */
//protected void myDocsList_ItemDeleted(Object sender,
// ListViewDeletedEventArgs e)
//{
//}
protected void myDocsList_ItemCommand(object sender,
ListViewCommandEventArgs e)
{
if (e.CommandName == "Delete")
{
int docId = int.Parse(e.CommandArgument.ToString());
deleteDocument(docId);
ListViewDataItem dataItem = (ListViewDataItem) e.Item;
myDocsList.Items.Remove(dataItem);
}
}
しかし、私は合理的にASPで少し経験していないし、少し失われています。
リストページの項目を次のページの更新ではなくポストバックで消えるようにするにはどうすればよいですか?
を:) – Mariusz
いいえ、あなたの投稿コードが私に似ていません回答。 'ItemCommand'イベントでは' ListView'とデータベースからアイテムを削除しましたが、再度バインドしませんでした!しかし、私はデータベースからアイテムを削除し、データを 'ListView'にリバウンドさせるだけです。これはうまくいきます!もう一度レビューしてみてください。御時間ありがとうございます。 –
私は同じ答えを投稿したいと思っていたが、あなたは私よりも速かった。 – Mariusz