本人是一个小白,刚学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(); //重新创建子控件
}
}
}
建议你把面向对象的概念和知识搞懂了,并运用于实践![Category("Behavior")]这些只是C#语言特有的特性。便于反射时调用的!从基础开始,UML搞通了,这些控件自然就懂了!新人强烈不建议使用控件!
我也不想用控件吗,所以要改造控件,特别是数据控件(gridview,datalist)功能都不是很实际,网上也说别直接用vs给的控件,所以我的自己学如何改造啊,这些代码都是书本自己写的控件(没有直接使用控件啊),但是书本没教我怎么改写控件,直接给代码?你有什么好建议啊,我要学自己写控件,介绍本书吧?
@黑夜猫头鹰: 抛弃控件吧,控件本身就不适合Web开发,只是在2003年代那个时候很先进,因为没有其他的替代产品!劝同学赶紧走出控件吧,研究MVC吧!控件本身就不是一种好的解决办法。前端用html+jquery+JSUI,后端用json!Web开发本身是一件很简单的事情,就是因为控件把它搞得复杂了!net平台下微软也有自己的mvc框架,java下也有很多工业级的mvc框架...
又出新概念mvc……,别越搞越复杂啊,学mvc那本书啊,我不行了,让我对学C语言都恐惧了,推荐一本好书吧,我看了那些C#的书都说用控件,就是没看过mvc的东西,你介绍本书吧,国产书太坑爹了,一本好书相当重要啊,求推荐吧
我要做一个控件,连接数据库,呈现数据,但是控件的功能太简单不实用,一定要改造控件啊,mvc能已表格的形式呈现数据不?大牛老师
@黑夜猫头鹰: http://www.jeasyui.com/demo/index.php
@黑夜猫头鹰: 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的风而发展的。
感谢了,非常详细
尤其改造这些控件,还不如学习如何制作jquery的插件了
大哥我都糊涂了,我刚学gridview、datalist控件时,高人们就说别直接用vs给的控件,别直接在vs属性器里改值,要自己学会在代码里修改。现在学自己改代码,你却说学习jquery(jquery是什么啊),叫我如何是何啊?能介绍本好书吗?太多东西要学?推荐本好书,让我学习改造vs控件吧?给本学jquery也行啊,求好书?
@黑夜猫头鹰: 楼主关注一下asp.net mvc 吧 这个才是真正的web开发啊
又出新概念mvc……,别越搞越复杂啊,学mvc那本书啊,我不行了,让我对学C语言都恐惧了,推荐一本好书吧,我看了那些C#的书都说用控件,就是没看过mvc的东西,你介绍本书吧,国产书太坑爹了,一本好书相当重要啊,(我知道控件不是很实用,很多时候不符合实际的使用,需要的功能都没有,改造没机会了,那就mvc)求推荐书,