一、GridView外观设置:
1、总体外观设置
ShowFooter:(bool)是否显示页脚
ShowHeader:(bool)是否显示页眉
GridLines:(enum)None-不显示格线;Horizontal-显示水平格线;Virtical-显示竖直格线;Both-显示水平和竖直格线
EmptyDataText:(string)如果数据源中内容为NULL时在GridView中显示的值
AlternatingRowStyle:交替项的样式
EditRowStyle:编辑项的样式
EmptyDataRowStyle:空数据项的样式
FooterStyle:页脚样式
HeaderStyle:页眉样式
PagerStyle:分页样式
RowStyle:行样式
SelectedRowStyle:选中项样式
1、上面的样式可以对GridView进行总体的外观设置,如果对某一列进行设置的话那可要在GridView右上角“智能菜单中”点击“编辑列”进行设置。
2、对绑定列进行外观设置
a.页眉是英文的
b.所有的数据都是居中对齐
c.time列的数据中显示了时分秒的数据
d.price列中应加上"RMB"的符号
e.最好对价格列的数据以红色字体显示
上面的这些问题我们可以通地单独对列进行格式设置来实现
点击GridView右上角“智能菜单中”点击“编辑列”,打开"字段"窗口:
这个图总体可以分作三大部分:可用字段,选中的字段,BoundField属性
(1)“可用字段”:显示了可供我们使用的列的类型
BoundField:绑定列,将数据库中的数据以字符形式绑定显示
CheckBoxField:复选框列,一般用来绑定数据库中的Bit型数,以复选框的形式显示在GridView中
HyperLinkField:超链接列,可以用数据源中的数据作超链接文本也可以把所有超链接文本设为统一的文本
ImageField:图片列,绑定数据源中的图片路径,并把图片显示出来
CommandField:命令列,常用的“选择”,“删除”,“编辑、更新、取消”
ButtonField:按钮列,其它做用的按钮
TemplateField:模板列,可以更灵活地自定义显示格式
BoundField中的重要属性:
ControlStyle:当前列中控件的样式
HeaderStyle:当前列中页眉的样式
FooterStyle:当前列中页脚的样式
ItemStyle:当前列中数据行的样式
ReadOnly:当前列是否是只读列,编辑的时候不显示文本框
SortExpression:排序表达式,这里只填数据源的列名
Visible:当前列是否可见
HeaderText:页眉文本
FooterText:页脚文本
DataField:当前列的数据行要显示哪个字段的数据,填写字段名
DataFormatString:对显示的数据进行格式化显示(在time列的DataFormatString属性中设置为:"{0:d}"时间就被格式话了)
if (e.Row.RowType == DataControlRowType.DataRow)
{
string birth = e.Row.Cells[4].Text; //时间单元格
DateTime dtbirth = DateTime.Parse(birth);
e.Row.Cells[4].Text = dtbirth.ToLongDateString();
}(日期时间格式化)
3:图片的显示
A:(imageField)
DataImageurlField:img(图片路径绑定的字段名)
DataAlternateTextField:name(鼠标提示或着图片不显示时提示的文本字段名)
DataAlternateTextFormtString:新鲜(每个字段都会显示的文本内容)
B:(BoundField)
把属性DataFormtString:
实际上在GridView在数据绑定的过程中是逐行实现的。是从GridView最上面的一行(页眉或上分页行)到最下面的一行(页脚或下分页行)逐行建造的。在建造每一行的过程中,又分为两步:创建行和绑定行两个步骤。
创建行:就是根据数据源的结构创建出n个单元格,并根据GridView的样式和BoundFField属性的样式设置好每个单元格的样式(背景色,前景色,字体等)。如果该行中有控件或静态文本(设计时已写死的文本,如页眉文本)那在创建的时候也会直接创建控件或静态文本。
绑定行:“创建行”执行完后,再进行“绑定行”。绑定行实际上就是把数据源中当前行的数据逐一填写到已创建好的行的相应单元格里去
在GridView绑定DataSource控件的时候实际上就是循环执行“创建行”和“绑定行”的过程。
GridView 为我们提供了两个事件:RowCreated和RowDataBound事件
RowCreated事件:是每一行“创建行”完成时被触发的事件。
RowDataBound事件:是每一行“绑定行”完成时被触发的事件。
代码验证:
protected void GridView1_RowCreated(object sender,GridViewRowEventArgs e)
{
Response.Write(e.Row.RowType.ToString()+" Created=>");
}
protected void GridView1_RowDataBound(object sender,GridViewRowEventArgs e)
{
Response.Write(e.Row.RowType.ToString()+" DataBound=>");
}
把汽车的价格大于50万的汽车红色字体显示价格单元格字体加粗
string str=e.Row.Cells[4].Text;
string s = str.Substring(str.LastIndexOf(">")+1);
double price = double.Parse(s);
if (price > 50)
{
e.Row.Font.Bold = true;
e.Row.Cells[4].ForeColor = Color.Red;
}
把汽车的价格显示再页脚上
if (e.Row.RowType == DataControlRowType.Footer)
{
double sum=0;
foreach (GridViewRow dgv inGridView1.Rows)//遍历GridView的每一行;GridView1.Rows所有行的集合
{
string str = dgv.Cells[4].Text;
string ss = str.Substring(str.LastIndexOf(">") +1);//字符串中含有html标记
double s = double.Parse(ss);
sum += s;
double avg = sum / GridView1.Rows.Count;
e.Row.Cells[4].Text = avg.ToString("#,#.##");
}
}
1.GridViewRowEventArgse形参:这是在建造行对象时产生的事件数据,它里面包含正在建造的当前行对象的信息,通过它我们可以取得正在建造的行对象和行对象中的单元格对象,并可以取得或设置这些对象相应的属性。
2.e.Row.RowType属性:(DataControlRowType枚举类型)它返回正在建造的行对象的类型(如:页眉、页脚、数据行、分页行等)
3.e.Row.RowState属性:(DataControlRowState枚举类型)它返回正在建造的行对象的状态(如:普通状态、交替状态、编辑状态、选中状态等)if (e.Row.RowType == DataControlRowType.DataRow)
{
if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState== DataControlRowState.Alternate)
{
}
}
它代表我们的操作只对数据行起作用,不对页眉和页脚起作用(因为页眉页脚的文本中并不包含我们需要的数据)。并且仅当数据行处理普通状态和交替状态时起作用,在编辑和选中状态不是不起作用的。
超链接列的使用(HypeLinkField 超连接列)
HeaderText:该超链接列的页眉文本
FooterText:该超链接列的页脚文本
Text;超连接文本统一显示(详细信息)
DataTextField:指定显示的文本字段(name)
DataNavigateurlFormatString:设置超链接的导航格式("default2.aspx?id={0}&name={1}");同时DataNavigateurlField:指定数据源的一个字段名,该字段的内容作为超链接列导向的网址,绑定超链接的属性字段(code,name);(传递多个参数就指定多个字段名用,号隔开)。
如果传递的参数中含有汉字,再页面中正常的显示参数的值,用代码指定超链接跳转的页面url。
if (e.Row.RowType == DataControlRowType.DataRow)
{
HyperLink link = (HyperLink)e.Row.Cells[1].Controls[0];
//controls(所有控件的集合,里面包含所有的控件)强制转换成超链接列
link.NavigateUrl = "default2.aspx?id="+e.Row.Cells[0].Text+"&name="+Server.UrlEncode(link.Text);
//设置超连接把名称改为编码值
}