private void OnNeedDataSource(DataSourceEventArgs args)
 {
     if (NeedDataSource != null)
     {
         NeedDataSource(this, args);
     }
 }
        private void InternalDataBind()
        {
            if (!requiresDataBind)
            {
                return;
            }

            object dataSource = string.IsNullOrEmpty(DataSourceID) ? null : SearchControl(this.Page, DataSourceID);

            if (dataSource == null)
            {
                DataSourceEventArgs args = new DataSourceEventArgs(dataSource);
                OnNeedDataSource(args);
                dataSource = args.DataSource;
            }

            if (dataSource != null)
            {
                if (dataSource is System.Web.UI.WebControls.ObjectDataSource)
                {
                    System.Web.UI.WebControls.ObjectDataSource objectDataSource = dataSource as System.Web.UI.WebControls.ObjectDataSource;
                    DataBindToIEnumerable(objectDataSource.Select());
                }
                else if (dataSource is IEnumerable)
                {
                    DataBindToIEnumerable(dataSource as IEnumerable);
                }
            }

            requiresDataBind = false;
        }