[已解决]扩展GridView [英] [Solved] Extending a GridView

查看:108
本文介绍了[已解决]扩展GridView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



我正在尝试扩展GridView以与DataPager一起使用. IPageableItemContainer的所有方法均已实现,但是我得到了:

dnetbs.Controls.DataGridExtended'' is not allowed here because it does not extend class ''System.Web.UI.UserControl


Hi,

I''m trying to extend a GridView to work with a DataPager. All the methods of IPageableItemContainer have been implemented, however I''m getting:

dnetbs.Controls.DataGridExtended'' is not allowed here because it does not extend class ''System.Web.UI.UserControl


namespace dnetbs.Controls
{
    public partial class DataGridExtended : GridView, IPageableItemContainer
    {
        public void SetDataSource(object DataSrc)
        {
            this.GridView1.DataSource = DataSrc;
        }
        public DataGridExtended()
            : base()
        {
            PagerSettings.Visible = false;
        }

        public event EventHandler<PageEventArgs> TotalRowCountAvailable;
        public int MaximumRows
        {
            get { return this.PageSize; }
        }
        public int StartRowIndex
        {
            get { return (this.PageSize * this.PageIndex); }
        }
        public virtual void OnTotalRowCountAvailable(PageEventArgs e)
        {
            if (TotalRowCountAvailable != null)
                TotalRowCountAvailable(this, e);
        }
        public virtual void SetPageProperties(int startRowIndex, int maximumRows, bool dataBind)
        {
            if (dataBind)
            {
                PageSize = maximumRows;
                int newPageIndex = (startRowIndex / PageSize);
                if (PageIndex != newPageIndex)
                {
                    OnPageIndexChanging(new GridViewPageEventArgs(newPageIndex));
                    PageIndex = newPageIndex;
                    OnPageIndexChanged(EventArgs.Empty);
                }
            }
            RequiresDataBinding = dataBind;
        }
        //Gets row count from SqlDataSource and the like... 
        private int _GetTotalRowsFromDataSourceObject(IEnumerable dataSource)
        {
            DataSourceView view = this.GetData();
            if (AllowPaging && view.CanPage && view.CanRetrieveTotalRowCount)
                return base.SelectArguments.TotalRowCount;
            else
                return (PageIndex * PageSize) + _GetSourceCount(dataSource);
        }
        //Gets the row count from a manually bound source or from a source in viewstate 
        private int _GetSourceCount(IEnumerable dataSource)
        {
            ICollection source = dataSource as ICollection;
            //condition ? first_expression : second_expression; returns one of two values depending on the value of a Boolean expression
            return source != null ? source.Count : (from x in dataSource.OfType<object>() select 1).Sum();
        }
        protected override int CreateChildControls(IEnumerable dataSource, bool dataBinding)
        {
            int baseResult = base.CreateChildControls(dataSource, dataBinding);
            if (dataSource != null)
            {
                int dataSourceCount = (IsBoundUsingDataSourceID && dataBinding) ?
                    _GetTotalRowsFromDataSourceObject(dataSource) :
                    _GetSourceCount(dataSource);
                OnTotalRowCountAvailable(new PageEventArgs(StartRowIndex, MaximumRows, dataSourceCount));
            }
            return baseResult;
        }
    }
}



更新:
由OP自己解决.



UPDATE:
Resolved by OP himself.

推荐答案

没关系,

:laugh:我意识到我需要实现一个自定义控件而不是用户控件.
Never mind,

:laugh: I realised that I need to implement a Custom Control instead of a user Control.


这篇关于[已解决]扩展GridView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆