Как оцениваются DataTextField и DataValueFields - PullRequest
0 голосов
/ 29 февраля 2012

Для элемента управления с привязкой к данным это обычный сценарий, в котором мы предоставляем data text field и data value field (в простых элементах управления, таких как Dropdownlist), но больше полей в элементах управления, таких как Gridview. Обычно источник данных имеет тип IEnumerable.

  • Как элемент управления внутренне обрабатывает эти значения или, скорее, как они получают значение из источника данных, не зная, с каким источником данных они имеют дело.

  • Может ли кто-нибудь объяснить с помощью кода, как элементы управления оценивают эти поля из источника данных.

Ответы [ 2 ]

0 голосов
/ 29 февраля 2012

Я никогда не знал, что смогу найти эту информацию так легко, и на самом деле Л.Лёд был неправ, когда использовал рефлексию для поиска данных из источника данных. Ни один из элементов управления данными не использует его при проверке через Reflector; (

ссылка, которая решила проблему

http://msdn.microsoft.com/en-us/library/ms366540.aspx

как ты это делаешь ниже

protected override void PerformDataBinding(IEnumerable retrievedData)
        {
            base.PerformDataBinding(retrievedData);

            // Verify data exists.
            if (retrievedData != null)
            {

                string dataStr = String.Empty;

                foreach (object dataItem in retrievedData)
                {
                    if (DataTextField.Length > 0)
                    {
                        dataStr = DataBinder.GetPropertyValue(dataItem,
                            DataTextField, null);
                    }
                    else
                    {
                        PropertyDescriptorCollection props =
                                TypeDescriptor.GetProperties(dataItem);
                        if (props.Count >= 1)
                        {
                            if (null != props[0].GetValue(dataItem))
                            {
                                dataStr = props[0].GetValue(dataItem).ToString();
                            }
                        }
                    }
                }

            }
        }

Если приведенный выше код выглядит как греческий и латинский, вам нужно будет пройти курс по разработке средств управления asp.net, чтобы понять, что делается.

0 голосов
/ 29 февраля 2012
  1. Как правило, элемент управления с привязкой к данным (или соответствующие компоненты, такие как DataControlField в GridView) будет обрабатывать событие DataBinding .

  2. В обработчике события извлекается элемент данных, который в настоящее время привязан (например, DataRowView или экземпляр объекта).Это делается через DataBinder.GetDataItem , передавая фактический элемент управления или NamingContainer элемента управления.Например, если вы реализуете элемент управления более низкого уровня, такой как DataControlField, для элемента управления с привязкой к данным более высокого уровня, такого как GridView, тогда он будет обрабатывать привязку данных элемента управления ячейкой и, следовательно, будет использовать контейнер именования ячейки для передачи вDataBinder.GetDataItem метод, который использует текущий контекст привязки данных, чтобы получить то же самое.

  3. Как только объект элемента данных извлечен, необходимо оценить данное выражение привязки данных по нему, чтобы получитьфактическое значение и применять любое форматирование в соответствии с различными свойствами, установленными для элемента управления / компонента.Самый простой способ - использовать перегрузку DataBinder.Eval .Однако можно использовать более эффективные способы - например, скажем, DataField строка будет только именем свойства, тогда вы можете просмотреть и кэшировать дескриптор свойства, а затем использовать его для разных элементов данных.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...