我不能从数据绑定(bind) ListView 中删除项目吗?
我将 ListView 绑定(bind)到用户集合。假设 ListView 正在显示来自测试对象的名称/地址。如果我尝试删除第一项,如下所示,它仍然显示集合中的所有记录。这没有任何好处。我只想知道我错过了什么。
我怀疑这是因为数据源仍然指向未更改的集合。但是如果我手动更改 ListView 项目,它不应该优先吗?
protected void Page_Load(object sender, EventArgs e)
{
lvTest.DataSource = new List<TestObj>{ obj1, obj2..}; //pseudo code
lvTest.DataBind();
lvTest.Items.RemoveAt(0);
}
更新
我知道这不是这样做的好方法。但是这个问题的目的是要知道为什么这不起作用。
我认为这可能是 ListView 控件中的一个错误。如果在删除第一个项目后检查调试器中的项目计数,您可以看到实际计数减少了 1,但它仍然呈现它。
此外,如果您在
lvTest.Items[0].Visible = false;
之后执行 RemoveAt(0)
,它实际上会使第二个项目不可见,这意味着 listview 认为第一个项目已删除,但无论如何都会呈现它。更新 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;
}
最佳答案
是的,你应该可以。据我了解,数据绑定(bind)纯粹是在 ListView 上填充条目的过程,因此应该可以在之后删除它们。
但是,如果这是您想要做的,数据绑定(bind)列表似乎不是正确的答案。要么先获取数据,修改它,然后用修改后的列表填充 ListView ;或修改数据流以反射(reflect)您需要的内容-您说这不是一种选择。
您的意思是您希望它是数据绑定(bind)的,但是您没有与您需要的列表实际匹配的数据源。这意味着它不应该是数据绑定(bind)的。
另一种可能有趣的可能性是使用 javascript/jquery 删除项目,这可能表明这是渲染问题还是对象问题。
关于c# - 从数据绑定(bind) ListView 中删除项目 : Possible bug?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7338024/