2010-09-30 101 views
2

已知ListView控件不能同时显示EmptyDataTemplate和InsertItemTemplate。Custom ListView同时显示EmptyDataTemplate和InsertItemTemplate

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

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

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

我相信只有两种方式来实现我想要的东西:

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

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

有没有人有任何想法如何解决#1和也许#2?

谢谢。

回答

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; 
    } 
} 

的伟大工程!

+0

伟大的解决方案,我写代码时必须忽略CreateEmptyDataItem函数。感谢赏金! – Willem 2010-10-06 16:44:25

-1

我不明白你的要求没有屏幕截图你实际上想要实现的。无论如何,你可以通过组合ListView + FormView或ListView +用户控件来实现这个接口。如果您可以提供更多信息,我可能会提供更多帮助。

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),并向启用InsertItemTemplate的EmptyDataTemplate添加一个Button“Insert”,因此隐藏EmptyDataTemplate。

+2

非常感谢,这帮助我解决了我的问题。我从你的建议开始,并努力达到完美的解决方案。我会奖励你的积分,因为你应得的,但我会加入我自己的解决方案。 – md1337 2010-10-06 16:30:26

+2

并非我在给出所有观点后都期待着答案,但是......这有一个问题。在InsertItemTemplate中,在用于插入新项目的字段上有一个RequiredFieldValidator,并且它始终被触发... – md1337 2010-10-06 22:00:01

+0

您的意思是它始终得到触发并且无法验证即使TextBox(?)有值吗?或者当您尝试在页面上做其他事情(其他按钮或其他东西)并且没有尝试插入项目时它会被触发?如果第二种情况是这种情况,请尝试将验证组添加到验证程序,文本框和插入按钮。 – Willem 2010-10-06 22:12:12