1.AlternatingItemTemplate:用于配置交替行的模板,所谓交替行就是第2、4、6、8...行,如果没有配置AlternatingItemTemplate,所有行都是用ItemTemplate,如果配置了AlternatingItemTemplate,逢双数的行就会使用AlternatingItemTemplate
2.Eval()方法一般有两个参数,第一个参数是需要绑定的字段名,第二个参数是格式化字符串,比如:NavigateUrl='<%# Eval("UserEmail","mailto:{0}")%>'
3.相对路径与绝对路径
相对路径:相对于当前目录的路径,不以"/"符号开头
基于根目录的路径:相对于根目录的路径,以"/"符号开头
比如:我们要在Admin目录下的ManagerUser文件中引用图片,那么当前目录路径就是http://xxxxxx/Forum/Admin,而根路径就是http://xxxxx,我们需要引用的是http://xxxxx/Forum/images/faces文件夹下的文件,那么对于相对路径就是../images/faces/文件名,而对于基于根目录的路径就是/Forum/images/faces/文件名。在Asp.Net中,我们还可以使用"~"符号来表示网站根目录,那么“~”也就等于“/Forum”,以下三种表示方式均是有效的:
DataImageUrlFormatString="/Forum/images/faces/{0}";
DataImageUrlFormatString="../images/faces/{0}";
DataImageUrlFormatString="~/images/faces/{0}";
4.事件
img事件通常在操作前引发,ed事件通常在操作后引发,比如:
PageIndexChanging/PageIndexChanged:改变当前页面索引前/后引发
5.怎样获取数据
---获取主键id---
思路一:将行索引号保存到CommandArgument(<asp:LinkButton CommandArgument='<%# Container.DataItemIndex %>'>)<如果不是模板列,索引号会自动保存到CommandArgument里,如果是则需要我 们手动绑定>,根据e.CommandArgument获取该行的索引号,其次绑定数据时需要把GridView的DataKeyNames属性设置为数据表的主键,然后我们可以根据GridView.DataKeys[行索引号]获取主 键id
思路二:直接将id值保存到CommandArgument属性里
---获取行的其他非主键数据---
思路一:将值保存到CommandArgument属性里
思路二:直接从GridView获取值,优点是能获取多个值,缺点是值必须是显示在GridView上的,唯一需要的是行的索引号,获取值:GridView.Rows[行索引号].Cells[列索引号].Text,如果列使用的是 模板列,则找某些控件的值时可这样获取:(GridView.Rows[行索引号].Cells[列索引号].FindControl("控件id") as 控件类型).Text
思路三:使用隐藏域来保存值,优点是数据可以是数据源中的任意数据,缺点是不宜存放过大的数据,否则会造成玉面体积急剧增加,如:<input type="hidden" runat="server" id="UserName" value='<%# Eval("UserName")%>'>,注意:别忘记让HTML控件的runat="server",否则程序中不能访问控件的实例,获取隐藏的值:(GridView.Rows[行索引号].FindControl("UserName") as HtmlInputHidden).Value;
思路四:直接根据主键字段从数据库读取值,优点是不受绑定的限制,灵活度大了,缺点是还需要访问一次数据库
6.格式化GridView
思路一:在GridView的绑定列中使用DataFormatString属性进行格式化,如:<asp:ButtonField DataField(绑定的数据字段)="UserName" DataFormatString="<i>{0}</i>">
思路二:在GridView的模板列的绑定标签中直接使用各种运算(比如三元运算符)和表达式进行格式化
但有的时候需要对绑定数据进行复杂的运算,不是简单的格式字符串和三元运算就能完成的,我们可以直接把绑定的数据传入后台代码,进行运算后让方法再把格式化后的字符串返回
在很多时候我们需要把0、1、2等数字型的数据转化为具有实际意义的字符串时,我们往往会使用if else或者switch case等语句,虽然可行但是代码显得很复杂,我们可以变通一下,把需要 输出的字符串使用字符串数组按照顺序排放,使用索引号来去响应的字符串,代码非常简洁
思路三:在GridView的模板列的绑定标签中调用后台方法进行格式化,与思路二相仿
思路四:在GridView的绑定事件处理方法(RowDataBound)中读取数据源的数据并为GridView赋值
RowDataBound事件里的代码如下:
protected void User_RowDataBound(object sender,GridViewRowEventArgs e)
{
GridViewRow gvr=e.Row;
if(gvr.RowType==DataControlRowType.DataRow)
{
string sUserName=DataBinder.Eval(gvr.DataItem,"UserName").ToString();
gvr.Cells[0].Text=string.Format("<i>{0}</i>",sUserName);
}
}
其实这样一个过程就实现了后台数据绑定,不但增加了灵活性还可以在绑定前进行各种权限判断,对不同的用户显示不同的数据
7.排序
GridView可自动进行排序,它给我们提供了一种常用的排序模式,那就是在需要排序的列的页眉使用超链接来显示列名,我们单击超链接后就能对单击的列进行排序,设置AllowSorting为true则启用 排序,若有些列是模板列,GridView并不知道单击模板列的时候需要按照哪个字段进行排序,所以,每一列都有一个SortExpression属性代表需要排序的字段名
8.分页
GridView可自动进行分页,有分页功能,其中AllowPaging属性是否启用分页,Mode属性设置分页导航的模式,有四种组合,(前一页/后一页 前一页/后一页和首页/末页 分页数字 分页数字和首页 /末页),PageButtonCount属性是分页导航中显示的页数,Position属性是分页导航显示的位置,PageSize是每一页显示的记录数,PageText或者PageImageUrl可以设置切换页面的文字的样式,可以是 文字或者图片,PageIndexChanging事件中e.NewPageIndex属性可获得当前页索引号