MS DynamicData的Children.ascx.cs文件有一个Page_Load
方法,返回一个显示“查看子项”的超链接。我想将子项的数量附加到超链接文本的末尾。以下是我的尝试。如何让超链接说“查看孩子 - #条目”?
protected void Page_Load(object sender, EventArgs e)
{
HyperLink1.Text = "View " + ChildrenColumn.ChildTable.DisplayName;
//The following code gives the total entries.
//How do I get the number of children only?
//int entries = 0;
//foreach (var entry in ChildrenColumn.ChildTable.GetQuery()) { entries++; }
//string entryText = (entries == 1) ? "entry" : "entries";
//HyperLink1.Text= HyperLink1.Text + " " + entries + " " + entryText;
}
答案 0 :(得分:3)
实际上并不难。您可以将以下方法添加到Children.ascx.cs文件中:
protected override void OnDataBinding(EventArgs e)
{
base.OnDataBinding(e);
object entity;
ICustomTypeDescriptor rowDescriptor = Row as ICustomTypeDescriptor;
if (rowDescriptor != null)
{
// Get the real entity from the wrapper
entity = rowDescriptor.GetPropertyOwner(null);
}
else
{
entity = Row;
}
// Get the collection and make sure it's loaded
RelatedEnd entityCollection = Column.EntityTypeProperty.GetValue(entity, null) as RelatedEnd;
if (entityCollection == null)
{
throw new InvalidOperationException(String.Format("The Children template does not support the collection type of the '{0}' column on the '{1}' table.", Column.Name, Table.Name));
}
if (!entityCollection.IsLoaded)
{
entityCollection.Load();
}
int count = 0;
var enumerator = entityCollection.GetEnumerator();
while (enumerator.MoveNext())
count++;
HyperLink1.Text += " (" + count + ")";
}
答案 1 :(得分:1)
好吧,HyperLink1.Text =“SomeString”应该使你的超链接文本成为“SomeString”
HyperLink1.Text = "View Children -"+numEntries+" entries";
应该让超链接说出你想说的内容,只要当时numEntries是正确的数字,至少它在我的机器上是这样的..
您当前的尝试结果是什么?
答案 2 :(得分:1)
我在这里找到了一个潜在的解决方案'FieldTemplates:Children.ascx:显示计数':http://forums.asp.net/t/1466373.aspx/1
答案 3 :(得分:0)
我有一个非常简单的使用动态的通用解决方案:
重写Childrex.aspx.cs中的OnDataBiding方法,并使用以下代码获取子实体的数量。
// get the field using dynamic
dynamic dynamicField = FieldValue;
// get the count property (this is a valid property for an EnitySet)
int count = dynamicField.Count;