我不能从数据绑定(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/

10-13 06:58
查看更多