首页 新闻 会员 周边

推荐书本学习如何改造vs控件(gridview、ourpage),看代码不懂,求书

0
悬赏园豆:15 [已解决问题] 解决于 2012-12-14 12:40

本人是一个小白,刚学c#一个学期,但是最近在练习编网站,但是那些参考书(不说了,都是国内人出的,只有代码和部分注释,但涉及那些知识点没讲),而且我们学校的教材有没教这些知识,最多叫我们使用控件,从来没改过控件,而且都是基本的知识点

   希望各位老师指点指点,谢谢大家了(我看不懂的代码就在下面,大牛们你们觉得我需要补哪方面的知识)。麻烦大家了

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace ServerControl
{
    public class GridView : System.Web.UI.WebControls.GridView
    {//红色的是什么语法啊

        [Category("Appearance")]
        [DefaultValue(true)]
        [Description("数据源为空时是否呈现表头")]
        [TypeConverter(typeof(BooleanConverter))]
        public bool EnableEmptyContentRender
        {
            get
            {
                if (ViewState["EnableEmptyContentRender"] == null)
                {
                    return true;
                }
                return Convert.ToBoolean(ViewState["EnableEmptyContentRender"]);
            }

            set
            {
                ViewState["EnableEmptyContentRender"] = value;
            }
        }

        [Category("Appearance")]
        [DefaultValue("")]
        [Description("数据源为空时表格样式类")]
        public string EmptyDataTableCssClass
        {
            get
            {
                if (ViewState["EmptyDataTableCssClass"] == null)
                {
                    return "";
                }
                return ViewState["EmptyDataTableCssClass"].ToString();
            }
            set
            {
                ViewState["EmptyDataTableCssClass"] = value;
            }
        }

        [Category("Appearance")]
        [DefaultValue("")]
        [Description("数据源为空时标题行样式类")]
        public string EmptyDataTitleRowCssClass
        {
            get
            {
                if (ViewState["EmptyDataTitleRowCssClass"] == null)
                {
                    return "";
                }
                return ViewState["EmptyDataTitleRowCssClass"].ToString();
            }
            set
            {
                ViewState["EmptyDataTitleRowCssClass"] = value;
            }
        }

        [Category("Appearance")]
        [DefaultValue("")]
        [Description("数据源为空时内容行样式类")]
        public string EmptyDataContentRowCssClass
        {
            get
            {
                if (ViewState["EmptyDataContentRowCssClass"] == null)
                {
                    return "";
                }
                return ViewState["EmptyDataContentRowCssClass"].ToString();
            }
            set
            {
                ViewState["EmptyDataContentRowCssClass"] = value;
            }
        }

        /// <summary>
        /// GridView数据为空时呈现的样式
        /// </summary>
        /// <param name="writer"></param>
        protected virtual void RenderEmptyContent(HtmlTextWriter writer)
        {
            Table t = new Table();  //创建一个HTML的Table
            t.GridLines = this.GridLines;   //设置Table的线型与GridView相同
            t.BorderStyle = this.BorderStyle;   //设置边界风格与GridView相同
            t.BorderWidth = 0;//??
            t.CellPadding = 1;
            t.CellSpacing = 1;
            t.HorizontalAlign = this.HorizontalAlign;   //设置水平对齐风格与GridView相同
            t.Width = this.Width;   //设置Table宽度与GridView相同
            t.CopyBaseAttributes(this);
            t.BorderColor = this.BorderColor;   //设置边界颜色与GridView相同
            t.EnableTheming = this.EnableTheming;   //设置主题是否生效与GridView相同
            t.ForeColor = this.ForeColor;   //设置前景色与GridView相同
            t.SkinID = this.SkinID;   //设置皮肤样式与GridView相同
            t.ToolTip = this.ToolTip;   //设置提示信息与GridView相同
            t.Visible = this.Visible;   //设置是否可见与GridView相同
            t.Font.CopyFrom(this.Font);   //设置字体对象与GridView相同
            //设置Table的层叠样式表
            t.CssClass = this.EmptyDataTableCssClass != "" ? this.EmptyDataTableCssClass : this.CssClass;
            TableRow row = new TableRow();  //新建一个行
            row.CssClass = this.EmptyDataTitleRowCssClass;//设置行的与层叠样式表
            row.Height = 25;
            //将行添加到Table中
            t.Rows.Add(row);
            //根据GridView中的字段创建Table行的单元格
            foreach (DataControlField field in this.Columns)
            {
                if (field.Visible)  //如果GridView中的该字段可见
                {
                    TableCell cell = new TableCell();   //创建单元格
                    cell.Text = field.HeaderText;   //设置单元格文本
                    row.Cells.Add(cell);    //将单元格添加到行中
                }
            }
            TableRow row2 = new TableRow(); //新建第二行
            row2.CssClass = this.EmptyDataContentRowCssClass;//设置行的与层叠样式表
            t.Rows.Add(row2);
            TableCell msgCell = new TableCell();
            if (this.EmptyDataTemplate != null) //如果GridView中设置了空模板
            {
                this.EmptyDataTemplate.InstantiateIn(msgCell);
            }
            else
            {
                msgCell.Text = this.EmptyDataText;  //设置单元格文本为空数据提示
            }
            msgCell.HorizontalAlign = HorizontalAlign.Center;   //设置单元格的水平对齐
            msgCell.ColumnSpan = this.Columns.Count;    //设置单元格的列合并
            row2.Cells.Add(msgCell);
            t.RenderControl(writer);    //将Table发送给HTML呈现流
        }

        /// <summary>
        /// 重写Control类的Render方法
        /// </summary>
        /// <param name="writer"></param>
        protected override void Render(HtmlTextWriter writer)
        {
            //如果GridView数据为空
            if (EnableEmptyContentRender && (this.Rows.Count == 0 || this.Rows[0].RowType == DataControlRowType.EmptyDataRow))
            {
                RenderEmptyContent(writer); //调用自定义呈现方法
            }
            else
            {
                base.Render(writer);    //调用基类呈现方法
            }
        }
    }
}

还有修改ourpage控件

namespace ServerControl
{
    [DefaultProperty("RecordCount")]
    [ToolboxData("<{0}:OurPager runat=server></{0}:OurPager>")]
    public class OurPager : CompositeControl, IPostBackEventHandler
    {
        Label _lblRecordCount;
        Label _lblPageSize;
        Label _lblPage;
        LinkButton _btnFirst;
        LinkButton _btnPrior;
        LinkButton _btnNext;
        LinkButton _btnLast;
        LinkButton _btnGo;
        TextBox _txtToPage;
        List<LinkButton> lbtnList;
        LinkButton _lbtnBack;
        LinkButton _lbtnFront;

        /// <summary>
        /// 页数
        /// </summary>
        private int PageCount
        {
            get
            {
                //由于Asp.net控件是无状态的,所以属性用ViewState保存状态
                if (ViewState["PageCount"] == null)
                {
                    return 0;
                }
                return (int)ViewState["PageCount"];
            }
            set
            {
                ViewState["PageCount"] = value;
                CalculateNumericPageCount(value, NumericButtonCount);
            }
        }

        [Category("Behavior")]
        [DefaultValue(0)]
        [Description("数据源记录数")]
        [TypeConverter(typeof(Int32Converter))]
        public int RecordCount
        {
            get
            {
                if (ViewState["RecordCount"] == null)
                {
                    return 0;
                }
                return (int)ViewState["RecordCount"];
            }
            set
            {
                if (ViewState["RecordCount"] != null && Convert.ToInt32(ViewState["RecordCount"]) != value)
                {
                    CurrentPageIndex = 1;//??
                }
                ViewState["RecordCount"] = value;
                CalculatePageCount(value, PageSize);
            }
        }

        [Category("Behavior")]
        [DefaultValue(10)]
        [Description("页尺寸/每页记录数")]
        [TypeConverter(typeof(Int32Converter))]
        public int PageSize
        {
            get
            {
                if (ViewState["PageSize"] == null)
                {
                    return 10;
                }
                return (int)ViewState["PageSize"];
            }
            set
            {
                ViewState["PageSize"] = value;
                CalculatePageCount(RecordCount, value);
            }
        }

        [Category("Behavior")]
        [DefaultValue(1)]
        [Description("当前页索引")]
        [TypeConverter(typeof(Int32Converter))]
        public int CurrentPageIndex
        {
            get
            {
                if (ViewState["CurrentPageIndex"] == null)
                {
                    return 1;
                }
                else
                {
                    return (int)ViewState["CurrentPageIndex"];
                }
            }
            set
            {
                if (value < 1 || value > PageCount) { }//怎么没有实现的方法的????
                if (ViewState["CurrentPageIndex"] == null || Convert.ToInt32(ViewState["CurrentPageIndex"]) != value)
                {
                    ViewState["CurrentPageIndex"] = value;
                    //根据当前页索引 和 每页页码按钮数 计算 页码按钮 页索引
                    int numPagIdx = value / NumericButtonCount;
                    if (value % NumericButtonCount > 0) //如果当前页索引和每页页码按钮数求除大于0
                    {
                        numPagIdx++;    //页码按钮页索引加1
                    }
                    NumericPageIndex = numPagIdx;   //设置页码按钮页索引
                    RecreateChildControls();    //重新创建子控件
                }
            }
        }

黑夜猫头鹰的主页 黑夜猫头鹰 | 初学一级 | 园豆:3
提问于:2012-11-13 13:59
< >
分享
最佳答案
0

建议你把面向对象的概念和知识搞懂了,并运用于实践![Category("Behavior")]这些只是C#语言特有的特性。便于反射时调用的!从基础开始,UML搞通了,这些控件自然就懂了!新人强烈不建议使用控件!

收获园豆:10
SmartBooks | 菜鸟二级 |园豆:264 | 2012-11-13 17:37

我也不想用控件吗,所以要改造控件,特别是数据控件(gridview,datalist)功能都不是很实际,网上也说别直接用vs给的控件,所以我的自己学如何改造啊,这些代码都是书本自己写的控件(没有直接使用控件啊),但是书本没教我怎么改写控件,直接给代码?你有什么好建议啊,我要学自己写控件,介绍本书吧?

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-11-13 22:49

@黑夜猫头鹰: 抛弃控件吧,控件本身就不适合Web开发,只是在2003年代那个时候很先进,因为没有其他的替代产品!劝同学赶紧走出控件吧,研究MVC吧!控件本身就不是一种好的解决办法。前端用html+jquery+JSUI,后端用json!Web开发本身是一件很简单的事情,就是因为控件把它搞得复杂了!net平台下微软也有自己的mvc框架,java下也有很多工业级的mvc框架...

SmartBooks | 园豆:264 (菜鸟二级) | 2012-11-14 08:52

又出新概念mvc……,别越搞越复杂啊,学mvc那本书啊,我不行了,让我对学C语言都恐惧了,推荐一本好书吧,我看了那些C#的书都说用控件,就是没看过mvc的东西,你介绍本书吧,国产书太坑爹了,一本好书相当重要啊,求推荐吧

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-11-14 13:20

我要做一个控件,连接数据库,呈现数据,但是控件的功能太简单不实用,一定要改造控件啊,mvc能已表格的形式呈现数据不?大牛老师

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-11-14 13:50

@黑夜猫头鹰: http://www.jeasyui.com/demo/index.php

SmartBooks | 园豆:264 (菜鸟二级) | 2012-11-14 16:36

@黑夜猫头鹰: net MVC 源码http://aspnet.codeplex.com/releases,老赵的视频:http://www.microsoft.com/china/msdn/events/webcasts/shared/webcast/series/mvc.aspx ,aso.net mvc 官方网站:http://www.asp.net/mvc/mvc4  真要看书的话,建议你找本java servlet的书,或者java spring的书,IBM有篇介绍的文章:www.ibm.com/developerworks/cn/java/wa-spring1/ ,毕竟微软的mvc也是随java mvc的风而发展的。

SmartBooks | 园豆:264 (菜鸟二级) | 2012-11-14 16:43

感谢了,非常详细

黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-11-14 22:15
其他回答(1)
0

尤其改造这些控件,还不如学习如何制作jquery的插件了

收获园豆:5
chenping2008 | 园豆:9836 (大侠五级) | 2012-11-13 14:14

大哥我都糊涂了,我刚学gridview、datalist控件时,高人们就说别直接用vs给的控件,别直接在vs属性器里改值,要自己学会在代码里修改。现在学自己改代码,你却说学习jquery(jquery是什么啊),叫我如何是何啊?能介绍本好书吗?太多东西要学?推荐本好书,让我学习改造vs控件吧?给本学jquery也行啊,求好书?

支持(0) 反对(0) 黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-11-13 22:59

@黑夜猫头鹰: 楼主关注一下asp.net mvc 吧 这个才是真正的web开发啊

支持(0) 反对(0) chenping2008 | 园豆:9836 (大侠五级) | 2012-11-14 09:22

又出新概念mvc……,别越搞越复杂啊,学mvc那本书啊,我不行了,让我对学C语言都恐惧了,推荐一本好书吧,我看了那些C#的书都说用控件,就是没看过mvc的东西,你介绍本书吧,国产书太坑爹了,一本好书相当重要啊,(我知道控件不是很实用,很多时候不符合实际的使用,需要的功能都没有,改造没机会了,那就mvc)求推荐书,

支持(0) 反对(0) 黑夜猫头鹰 | 园豆:3 (初学一级) | 2012-11-14 13:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册