DynamicData - Как я могу показать количество детей в FieldTemplate Children.ascx.cs? - PullRequest
3 голосов
/ 16 января 2012

В файле Children.ascx.cs файла MS DynamicData есть метод 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;
}

Ответы [ 4 ]

3 голосов
/ 26 января 2012

На самом деле это не так сложно. Вы можете добавить следующий метод в ваш файл 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 голос
/ 17 января 2012

Я нашел здесь потенциальное решение 'FieldTemplates: Children.ascx: Displaying Count' : http://forums.asp.net/t/1466373.aspx/1

1 голос
/ 16 января 2012

хорошо, HyperLink1.Text = "SomeString" должен сделать текст вашей гиперссылки "SomeString"

HyperLink1.Text = "View Children -"+numEntries+" entries";

должен заставить гиперссылку сказать то, что вы хотите сказать, при условии, что numEntries - правильное числов то время, по крайней мере, это работает на моей машине ..

Каков текущий результат вашей попытки?

0 голосов
/ 15 июля 2013

У меня есть очень простое универсальное решение с использованием динамического:

Переопределите метод OnDataBiding в Childrex.aspx.cs и используйте следующий код для получения количества дочерних объектов.

// get the field using dynamic
dynamic dynamicField = FieldValue;

// get the count property (this is a valid property for an EnitySet)
int count = dynamicField.Count;
...