自定义ListView同时显示EmptyDataTemplate和InsertItemTemplate

时间:2010-09-30 20:08:21

标签: asp.net data-binding listview controls custom-controls

众所周知,ListView控件不能同时显示EmptyDataTemplate和InsertItemTemplate。

对于我的设计风格,我需要能够同时展示这两种风格。我希望能够显示没有数据存在,同时显示一个表单来添加新数据。

我已经实现了各种解决方案,例如将PlaceHolder放入我的LayoutTemplate中,然后在代码隐藏中手动显示或隐藏此PlaceHolder,具体取决于是否有数据。

但是,我想要一个具有此内置功能的控件,以保持我的代码隐藏。

我相信只有两种方法可以实现我的目标:

  1. 第一种方式(首选)是自己编写该自定义控件。我正在考虑从ListView派生并覆盖负责禁用EmptyDataTemplate的函数,但我没有使用自定义控件的经验。而且我甚至不确定它最终会起作用。

  2. 第二种方式是使用在某处找到或购买的自定义控件。我无法找到具有与ListView相同的基本功能的控件。

  3. 有谁知道如何解决#1和#2?

    谢谢。

3 个答案:

答案 0 :(得分:3)

这是我最终做的事情:

public class MyListView : ListView
{
    protected override int CreateChildControls(IEnumerable dataSource, bool dataBinding)
    {
        int itemCount = base.CreateChildControls(dataSource, dataBinding);

        if (this.InsertItemPosition != InsertItemPosition.None && itemCount == 0)
        {
            CreateEmptyDataItem();
        }

        return itemCount;
    }
}

效果很好!

答案 1 :(得分:1)

我会选择1:创建自定义控件 因为你没有指定我在VB.NET中编写的编程语言:

Public Class CustomListView
    Inherits ListView
    Public Sub CheckEmptyData() Handles Me.PreRender
        If Me.Items.Count = 0 Then
            Dim label As New Label
            label.Text = "No data found <br/>"
            Me.Controls.AddAt(0, label)
        End If
    End Sub
End Class

刚测试它并且工作正常,它可以替换现有的ListView。

正如您所看到的,它会检查是否有任何数据,如果没有,则会插入带有“未找到数据”文本的标签。我没有找到一种简单的方法来使用EmptyDataTemplate,这将是一个更好的选择,但这可能已经适合你了。

另一种选择是在没有数据的情况下隐藏InsertItem(InsertItemPosition.None),并向EmptyDataTemplate添加一个Button“Insert”,以启用InsertItemTemplate,从而隐藏EmptyDataTemplate。

答案 2 :(得分:-1)

如果没有您实际尝试实现的屏幕截图,我不太了解您的要求。无论如何,您可以使用ListView + FormView或ListView +用户控件的组合来实现此接口。如果您可以提供更多信息,我可能会进一步提供帮助。