asp.net - 如何将 Entity Framework 对象数据绑定(bind)到 FormView

标签 asp.net entity-framework data-binding webforms asp.net-4.0

我正在使用 EF 实体实例将数据绑定(bind)到许多 FormView 控件,但我必须求助于这个荒谬的组合,以便在不使用 EntityDataSource 控件的情况下实现我想要的:

propertyHeaderSection.DataSource = new List<PropertyDetailsModel> { _propertyDetails };

我怀疑我将不得不从 FormView 派生出我自己的控件并使其能够接受几乎 POCO 作为数据源。我从哪里开始?

最佳答案

这是我的实现,与 patmortech 的想法相同,但我还发现 BaseDataBoundControl 上的 ValidateDataSource 方法是在运行时引发异常的原因,如果您的数据源不可枚举。

public class CustomFormView : System.Web.UI.WebControls.FormView
    {
        public override object DataSource
        {
            get
            {
                if (!(base.DataSource is IEnumerable))
                    return new[] {base.DataSource};

                return base.DataSource;
            }
            set
            {
                base.DataSource = value;
            }
        }

        // This method complains at run time, if the datasource is not 
        // IListSource, IDataSource or IEnumerbale
        protected override void ValidateDataSource(object dataSource)
        {
            //base.ValidateDataSource(dataSource);
        }
    }

编辑:

考虑到这个建议,我对检查分配的 DataSource 是否可枚举的方式进行了一些更改。我还设法创建了一个示例应用程序(VS 2010 解决方案)来演示更改。该应用程序可以从 http://raghurana.com/blog/wp-content/attachments/FormViewDataProblem.zip 下载

简而言之,这就是我要检查的内容,以确保现有的数据源可以被枚举或不被枚举:
public static bool CanEnumerate( this object obj )
    {
        if (obj == null) return false;

        Type t = obj.GetType();

        return t.IsArray ||
               t.Implements(typeof (IEnumerable).FullName) ||
               t.Implements(typeof (IListSource).FullName) ||
               t.Implements(typeof (IDataSource).FullName);
    }

如果这不是所需的功能,请随时提出更多更改。干杯。

关于asp.net - 如何将 Entity Framework 对象数据绑定(bind)到 FormView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7512422/

相关文章:

c# - Entity Framework 每个类型的表继承 - 将继承的类型添加到数据库时出现错误 "Invalid column name"

c# - 我想在存储库模式中执行通用搜索选项

c# - 依赖属性 : PropertyChangedCallBack only called once

asp.net - 遍历 !DumpHeap 输出以读取内存偏移量处的值

c# - asp.net 如何在 GridView 中为按钮字段创建点击事件

ASP.NET OnTextChanged无法从更新面板内部触发

c# - 使用 ':' 符号的正则表达式标识符和分隔符

c# - EF代码首先不创建数据库

WPF:在 DataTable、MVVM 方式中更改列后刷新 DataGrid

c# - 让 FocusManager 等到数据绑定(bind)完成?