众所周知,ListView控件不能同时显示EmptyDataTemplate和InsertItemTemplate。
对于我的设计风格,我需要能够同时展示这两种风格。我希望能够显示没有数据存在,同时显示一个表单来添加新数据。
我已经实现了各种解决方案,例如将PlaceHolder放入我的LayoutTemplate中,然后在代码隐藏中手动显示或隐藏此PlaceHolder,具体取决于是否有数据。
但是,我想要一个具有此内置功能的控件,以保持我的代码隐藏。
我相信只有两种方法可以实现我的目标:
第一种方式(首选)是自己编写该自定义控件。我正在考虑从ListView派生并覆盖负责禁用EmptyDataTemplate的函数,但我没有使用自定义控件的经验。而且我甚至不确定它最终会起作用。
第二种方式是使用在某处找到或购买的自定义控件。我无法找到具有与ListView相同的基本功能的控件。
有谁知道如何解决#1和#2?
谢谢。
答案 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 +用户控件的组合来实现此接口。如果您可以提供更多信息,我可能会进一步提供帮助。