代码之家  ›  专栏  ›  技术社区  ›  Eric

自定义控件使用DataSourceID

  •  1
  • Eric  · 技术社区  · 15 年前

    我正在尝试编写自定义控件。我想允许它的用户指定一个数据源ID(很像GridView、中继器等)。

    我可以找到与ID对应的数据源,也可以获取关联的数据源视图。但获取数据的唯一方法似乎是使用异步的select方法。当然,我可以设置回调,这样我的代码在回调发生之前都会阻塞。但这需要很多奇怪的旋转,我怀疑我做错了什么。

    如果我想要一个控件像其他ASP.NET数据控件一样工作,我应该做些什么呢?

    以下是我写的:

        string dataSourceId = "SomeDataSourceForTesting";
        protected override void RenderContents(HtmlTextWriter writer)
        {
            IDataSource ds = (IDataSource)Parent.FindControl(dataSourceId);
            List<string> viewNames = new List<string>();
            foreach(string name in ds.GetViewNames())
            {
                viewNames.Add(name);
            }
            string viewname = viewNames[0];
            writer.WriteLine("the viewname is " + viewname);
            DataSourceView view = ds.GetView(viewname);
            view.Select(...); //this really has to be asynchronous?
            //write out some stuff from the data source
        }
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   m3kh    15 年前

    您想要哪种类型的数据绑定控件?如果需要表格格式,则应从 System.Web.UI.WebControls.DataBoundControl . 对于分层格式,派生自 System.Web.UI.WebControls.HierarchicalDataBoundControl . 它们都有一个属性来分配数据源控件。

    为了 DataBoundControl 您应该覆盖PerformDataBinding。此方法有一个名为 data 包含数据源提供的数据的。

    public class Test : System.Web.UI.WebControls.DataBoundControl
    {
    
        protected override void PerformDataBinding(System.Collections.IEnumerable data)
        {
            base.PerformDataBinding(data);
        }
    
    }
    

    为了 HierarchicalDataBoundControl 您应该重写与 数据边界控制 . 通过查看 GetData 方法。

    public class Test : System.Web.UI.WebControls.HierarchicalDataBoundControl
    {
    
        protected override void PerformDataBinding()
        {
            base.PerformDataBinding();
    
            System.Web.UI.HierarchicalDataSourceView view = base.GetData("View Path");
        }
    
    }