【发布时间】:2011-09-07 17:28:47
【问题描述】:
我不能从数据绑定列表视图中删除项目吗?
我将列表视图绑定到一组用户。假设列表视图正在显示来自测试对象的名称/地址。如果我尝试如下删除第一项,它仍会显示集合中的所有记录。这没有任何好的目的。我只想知道我错过了什么。
我怀疑这是因为数据源仍然指向未更改的集合。但是如果我手动更改列表视图项目,它不应该优先吗?
protected void Page_Load(object sender, EventArgs e)
{
lvTest.DataSource = new List<TestObj>{ obj1, obj2..}; //pseudo code
lvTest.DataBind();
lvTest.Items.RemoveAt(0);
}
更新 我知道这不是这样做的好方法。但是这个问题的目的是知道为什么这不起作用。
我认为这可能是列表视图控件中的错误。如果您在删除第一个项目后在调试器中检查项目计数,您可以看到实际计数减少了 1,但它仍然呈现它。
另外,如果你在RemoveAt(0) 之后执行lvTest.Items[0].Visible = false;,它实际上会使第二个项目不可见,这意味着列表视图认为第一个项目被删除但无论如何都会呈现它。
更新 2
根据要求,用于测试的标记和代码隐藏如下。
<asp:ListView ID="lvTest" runat="server" >
<LayoutTemplate><asp:PlaceHolder ID="itemPlaceholder" runat="server" /></LayoutTemplate>
<ItemTemplate>
<div><%# Eval("CompanyName")%><hr /></div>
</ItemTemplate>
<EmptyDataTemplate><div>None</div></EmptyDataTemplate>
</asp:ListView>
protected void Page_Load(object sender, EventArgs e)
{
lvTest.DataSource = GetCompanyList();
lvTest.DataBind();
lvTest.Items.RemoveAt(0);
}
public static List<Company> GetCompanyList()
{
List<Company> c = new List<Company>();
Company c1 = new Company();
c1.CustomerID = "2122";
c1.ContactName = "testc1";
c1.CompanyName = "test2";
Company c2 = new Company();
c2.CustomerID = "2123";
c2.ContactName = "testc2";
c2.CompanyName = "test2";
c.Add(c1);
c.Add(c2);
return c;
}
【问题讨论】:
-
你在使用 mvvm 吗?在这种情况下,您可能还想发送通知。
-
只是普通的asp.net,页面上有一个listview,代码隐藏在这个代码中。
-
不能在绑定之前删除要删除的数据吗?
-
你不能。它会抛出一个异常,因为在它绑定之前不会有任何项目。我试过了。如果您的意思是收藏,不,我需要以这种方式删除该项目。就像我提到的,我很好奇为什么它不起作用。
-
只是出于好奇,您能否展示您的真实代码而不是伪代码?你能在后面显示标记和整个代码吗?如果您在数据绑定之前在 0 处删除并对此进行调试,您会看到什么?