저는 이고, IEnumerable<MyDocument>
DataSource
입니다.사용자 정의 데이터 소스를 사용하여 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를 경험하지 못하고 조금 잃어 버렸다.
ListView 항목이 다음 페이지 새로 고침 대신 포스트 백에서 사라지게하려면 어떻게해야합니까?
난 그냥 simillar 답 : – Mariusz
을 게시 한 아니, 당신의 게시 된 코드가 모두없는 내 대답. 'ItemCommand' 이벤트에서 당신은'ListView'와 데이터베이스로부터 아이템을 삭제했지만 다시 바인딩되지 않았습니다! 하지만 데이터베이스에서 항목을 삭제하고 데이터를 'ListView'에 리바운드 한 경우에만 정상적으로 작동합니다. 검토하고 다시 시도해 주시겠습니까? 시간 내 줘서 고마워. –
나는 같은 대답을 게시하고 싶었지만 당신은 나보다 더 빠르다는 것을 의미한다. – Mariusz