首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何评估DataTextField和DataValueFields

如何评估DataTextField和DataValueFields
EN

Stack Overflow用户
提问于 2012-02-29 08:53:31
回答 2查看 1.2K关注 0票数 0

对于数据绑定控件,我们通常提供data text fielddata value field (在简单的控件(如Dropdownlist)中),但在Gridview等控件中提供更多的字段()。通常,数据源是IEnumerable类型的。

  • 控件如何在内部处理这些值,或者更确切地说,它们是如何从数据源获取值的,而不知道它们处理的是哪种数据源。
  • 有人能用代码解释控件如何从数据源计算这些字段吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-29 10:09:56

我从来不知道我能如此容易地找到这些信息,而LLyod在使用反射来从数据源中查找数据方面实际上是错误的。当我通过Reflector检查时,没有一个数据控件使用它;(

解决问题的链接

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

你是怎么做的,下面是

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-02-29 09:18:59

  1. 通常,数据绑定控件(或相关组件,如DataControlField in GridView)将处理DataBinding事件。
  2. 在事件处理程序中,检索当前绑定的数据项(例如DataRowView或实体实例)。这是通过DataBinder.GetDataItem传递实际控件或控件的NamingContainer来完成的。例如,如果您正在为更高级别的数据绑定控件(如DataControlField )实现一个较低级别的控件(如GridView ),那么它将处理单元控件的数据绑定,因此它将使用单元格的命名容器传递给使用当前数据绑定上下文的DataBinder.GetDataItem方法来获得相同的数据。
  3. 一旦检索到数据项对象,就需要根据它计算给定的数据绑定表达式,以获得实际值,并根据设置到控件/组件的不同属性应用任何格式设置。最简单的方法是使用DataBinder.Eval重载。但是,可以使用更有效的方法--例如,假设DataField字符串仅为属性名称,那么您可以查找和缓存属性描述符,然后对不同的数据项使用相同的方法。

我建议您使用Reflector等工具来检查相关控件的代码,以获得更好的想法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9496065

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档