DropDownList.docx
《DropDownList.docx》由会员分享,可在线阅读,更多相关《DropDownList.docx(45页珍藏版)》请在冰豆网上搜索。
DropDownList
通过前面的例子我们看到每次我们要显示数据的时候都要通过一个循环来显示满足条件的数据,这是一个比较麻烦的过程,为此微软定义了一系列的控件专门用于显示数据的格式,通过这些控件可以以可视化的方式查看绑定数据之后的效果。
这些控件称之为数据绑定控件。
在中所有的数据库绑定控件都是从BaseDataBoundControl这个抽象类派生的,这个抽象类定义了几个重要属性和一个重要方法:
DataSource属性:
指定数据绑定控件的数据来源,显示的时候程序将会从这个数据源中获取数据并显示。
DataSourceID属性:
指定数据绑定控件的数据源控件的ID,显示的时候程序将会根据这个ID找到相应的数据源控件,并利用这个数据源控件中指定方法获取数据并显示。
DataBind()方法:
当指定了数据绑定控件的DataSource属性或者DataSourceID属性之后,再调用DataBind()方法才会显示绑定的数据。
并且在使用数据源时,会首先尝试使用DataSourceID属性标识的数据源,如果没有设置DataSourceID时才会用到DataSource属性标识的数据源。
也就是说DataSource和DataSourceID两个属性不能同时使用。
数据绑定控件的DataSource控件属性必须是一个可以枚举的数据源,如实现了ICollection、IEnumerable或IListSource接口的类的实例。
今天要讲述的内容有:
DropDownList控件
ListBox控件
GridView控件
DataList控件
Repeater控件
FormView控件
DetailsView控件
DropDownList控件
DropDownList控件是一个相对比较简单的数据绑定控件,它在客户端被解释成这样的HTML标记,也就是只能有一个选项处于选中状态。
DropDownList控件常见属性:
AutoPostBack属性:
这个属性的用法在讲述基本控件的时候已经讲过,是用来设置当下拉列表项发生变化时是否主动向服务器提交整个表单,默认是false,即不主动提交。
如果设置为true,就可以编写它的SelectedIndexChanged事件处理代码进行相关处理(注意:
如果此属性为false即使编写了SelectedIndexChanged事件处理代码也不会马上起作用)。
DataTextField属性:
设置列表项的可见部分的文字。
DataValueField属性:
设置列表项的值部分。
Items属性:
获取控件的列表项的集合。
SelectedIndex属性:
获取或设置DropDownList控件中的选定项的索引。
SelectedItem属性:
获取列表控件中索引最小的选定项。
SelectedValue属性:
取列表控件中选定项的值,或选择列表控件中包含指定值的项。
因为在实际开发中,用户希望直观地看见选中哪个选项,而在操作数据库的时候我们更希望直接以该值对应的编号来操作,利用DataTextField属性和DataValueField属性就可以很方便地做到这一点,这两个属性通常是数据源中的某个字段名(如果DataSource属性是DataTable或者是DataView的话)或者范型集合中实体的属性(如果DataSource属性是System.Collections.Generic.List的话,则可以指定为T的属性)。
下面是DropDownList控件的例子,依然用到的是第六章中创建的表(本代码采用了单页模式):
1.<%@ Page Language="C#" %>
2.<%@ Import Namespace="System.Data" %>
3.<%@ Import Namespace="System.Data.SqlClient" %>
4.
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:
//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5.
6.
7.
8. protected void Page_Load(object sender, EventArgs e)
9. {
10. if (!
Page.IsPostBack)
11. {
12. BindMonthList();
13. BindUserList();
14. }
15. }
16.
17. private void BindMonthList()
18. {
19. //因为所有的数组都是Array类的派生类
20. //而Array类实现了IEnumerable和ICollection这两个接口,所以可以被当作数据源
21. int[] monthList = new int[12];
22. for (int i = 0; i <= 11; i++)
23. {
24. monthList[i] = i + 1;
25. }
26. ddlMonthList.DataSource = monthList;
27. ddlMonthList.DataBind();//注意不能缺少这一句,否则下拉列表中没有数据
28. }
29.
30. private void BindUserList()
31. {
32. //实例化Connection对象
33. SqlConnection connection = new SqlConnection("Data Source=(local);Initial Catalog=AspNetStudy;Persist Security Info=True;User ID=sa;Password=sa");
34. //实例化Command对象
35. SqlCommand command = new SqlCommand("select UserID,RealName from UserInfo", connection);
36. SqlDataAdapter adapter = new SqlDataAdapter(command);
37. DataTable data = new DataTable();
38. adapter.Fill(data);
39.
40. ddlUserList.DataTextField = "RealName";//指定下拉列表中的文字显示部分
41. ddlUserList.DataValueField = "UserID";//指定下拉列表中的值部分
42. ddlUserList.DataSource = data;
43. ddlUserList.DataBind();
44. }
45.
46.
47.
//www.w3.org/1999/xhtml" >
48.
49.
DropDownList控件的例子50.
51.
52.
59.
60.
下面是运行效果:
注意,第二个DropDownList控件绑定数据源时有两句话必不可少,就是:
1.ddlUserList.DataTextField = "RealName";//指定下拉列表中的文字显示部分
2.ddlUserList.DataValueField = "UserID";//指定下拉列表中的值部分
如果缺少这两句,将会是下面的效果:
另外,DropDownList控件默认情况下是第一个选项处于选中状态,如果我们想在绑定数据之后让某个选项处于选中状态,可以利用它的Items属性,DropDownList控件的Items属性其实是一个ListItemCollection的实例,ListItemCollection类有两个重要方法:
publicListItemFindByText(stringtext):
在选项集合中查找指定文字的选项。
publicListItemFindByValue(stringvalue):
在选项集合中查找指定值的选项。
利用这个属性,我们可以让某个选项在数据绑定后就处于选中状态。
比如在上面的代码中我们希望绑定数据源后,让刘备处于选中状态,那么我们的BindUserList()的代码可以这么写:
1.private void BindUserList()
2. {
3. //实例化Connection对象
4. SqlConnection connection = new SqlConnection("Data Source=(local);Initial Catalog=AspNetStudy;Persist Security Info=True;User ID=sa;Password=sa");
5. //实例化Command对象
6. SqlCommand command = new SqlCommand("select UserID,RealName from UserInfo", connection);
7. SqlDataAdapter adapter = new SqlDataAdapter(command);
8. DataTable data = new DataTable();
9. adapter.Fill(data);
10.
11. ddlUserList.DataTextField = "RealName";//指定下拉列表中的文字显示部分
12. ddlUserList.DataValueField = "UserID";//指定下拉列表中的值部分
13. //DataTable类实现了IListSource接口
14. ddlUserList.DataSource = data;
15. ddlUserList.DataBind();
16. //根据指定文字找到了对应的选项
17. ListItem item = ddlUserList.Items.FindByText("刘备");
18. //如果该选项不为null,则让该选项处于选中状态
19. //如果不进行这个判断,而选项集合中没有对应的选项,则会抛出异常
20. if (item !
= null)
21. {
22. item.Selected = true;
23. }
24. }
下面是修改后的代码的运行结果:
ListBox控件
ListBox控件和DropDownList控件非常类似,ListBox控件是也是提供一组选项供用户选择的,只不过DropDownList控件只能有一个选项处于选中状态,并且每次只能显示一行(一个选项),而ListBox控件可以设置为允许多选,并且还可以设置为显示多行。
除了与DropDownList具有很多相似的属性之外,ListBox控件还有以下属性:
Rows属性:
设置ListBox控件显示的行数。
SelectionMode属性:
设置ListBox的选择模式,这是一个枚举值,它有Multiple和Single两个值,分别代表多选和单选,默认是Single,即同时只能有一个选项处于选中状态。
如果要想实现多选,除了设置SelectionMode属性为Multiple外,在选择时需要按住Ctrl键。
需要说明的是,因为ListBox允许多选,所以如果ListBox的SelectionMode属性为Multiple,那么SelectedIndex属性指的是被选中的选项中索引最小的那一个,SelectedValue属性指的是被选中的选项集合中索引最小的那一个的值。
下面是ListBox的用法举例:
1.<%@ Page Language="C#" %>
2.<%@ Import Namespace="System.Data" %>
3.<%@ Import Namespace="System.Data.SqlClient" %>
4.
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:
//www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5.
6.
7.
8. protected void Page_Load(object sender, EventArgs e)
9. {
10. if (!
Page.IsPostBack)
11. {
12. BindUserList();
13. }
14. }
15.
16. private void BindUserList()
17. {
18. //实例化Connection对象
19. SqlConnection connection = new SqlConnection("Data Source=(local);Initial Catalog=AspNetStudy;Persist Security Info=True;User ID=sa;Password=sa");
20. //实例化Command对象
21. SqlCommand command = new SqlCommand("select UserID,RealName from UserInfo", connection);
22. SqlDataAdapter adapter = new SqlDataAdapter(command);
23. DataTable data = new DataTable();
24. adapter.Fill(data);
25.
26. listUsers.DataTextField = "RealName";//指定下拉列表中的文字显示部分
27. listUsers.DataValueField = "UserID";//指定下拉列表中的值部分
28. //DataTable类实现了IListSource接口
29. listUsers.DataSource = data;
30. listUsers.DataBind();
31. }
32.
33. protected void btnOK_Click(object sender, EventArgs e)
34. {
35. string selectedUserName = string.Empty;
36. //遍历ListBox中的每一个选项
37. foreach (ListItem item in listUsers.Items)
38. {
39. //如果选项被选中
40. if (item.Selected)
41. {
42. selectedUserName += item.Value+",";
43. }
44. }
45. //如果至少有一个选项处于选中状态
46. if (!
string.IsNullOrEmpty(selectedUserName))
47. {
48. //删除最后一个","符号
49. selectedUserNameselectedUserName = selectedUserName.Remove(selectedUserName.Length - 1);
50. }
51. Response.Write("您选择的用户编号有:
" + selectedUserName);
52. }
53.
54.
55.
//www.w3.org/1999/xhtml" >
56.
57.
ListBox控件用法的例子58.
59.
60.
65.
66.
下面是运行情况:
按住Ctrl键同时选择几个选项,然后点击“确定”按钮之后的结果:
GridView控件
GridView控件作为1.1下的DataGrid的替代品,它内置了表格呈现样式。
GridView控件用来在表中显示数据源的值。
每列表示一个字段,而每行表示一条记录。
GridView控件支持下面的功能:
绑定至数据源控件,如SqlDataSource。
内置排序功能。
内置更新和删除功能。
内置分页功能。
内置行选择功能。
以编程方式访问GridView对象模型以动态设置属性、处理事件等。
多个键字段。
用于超链接列的多个数据字段。
可通过主题和样式进行自定义的外观。
可以实现多种样式的数据展示。
GridView控件主要有以下常见属性:
AllowPaging属性:
设置是否启用分页功能。
AllowSorting属性:
设置是否启用排序功能。
AutoGenerateColumns属性:
设置是否为数据源中的每个字段自动创建绑定字段。
这个属性默认为true,但在实际开发中很少会自动创建绑定列,我们总会根据一些情况让一些列不显示,比如显示用户列表的时候不会将用户密码显示出来,显示文章列表的时候不会将文章内容显示出来。
Columns属性:
获取GridView控件中列字段的集合。
PageCount属性:
获取在GridView控件中显示数据源记录所需的页数。
PageIndex属性:
获取或设置当前显示页的索引。
PagerSetting属性:
设置GridView的分页样式。
PageSize属性:
设置GridView控件每次显示的最大记录条数。
下图是将一个GridView控件拖到页面的情况:
点击“编辑列…”会出现下面的界面:
从上面的图中我们可以看出在GridView中可以显示7中类型的字段,它们分别是:
BoundField:
绑定字段,以文本的方式显示数据。
CheckBoxField:
复选框字段,如果数据库是bit字段,则以此方式显示。
HyperLinkField:
用超级连接的形式的显示字段值。
ImageField:
用于显示存放Image图象的url字段数据,显示成图片效果。
ButtonField:
显示按钮列。
CommandField:
显示可执行操作的列,可以执行编辑或者删除等操作。
可以设置它的ButtonType属性来决定显示成普通按钮、图片按钮或者超级链接。
TemplateField:
自定义数据的显示方式,在这里我们可以使用我们所熟悉的HTML控件或者Web服务器控件。
对于我们经常使用到的Users这个表,这次我们不再使用for循环来显示了,这次使用GridView控件来显示。
GridView控件的字段大都有HeaderText这个属性,这个属性是用来设置数据的镖头的,如果我们不设置的话默认都是以数据库的相应字段作为表头。
另外还有一个DataField属性,这个属性是用来设置要绑定显示的数据的属性或者列名。
在这里我们希望在显示的时候给出一个链接,用户可以点击这个链接跳转到查看详细介绍的页面,并且我们还希望将用户的电子邮件显示成超级链接的方式。
在这里还需要介绍一个属性:
DataNavigateUrlFormatString,类似的还有DataTextFormatString,有时候在显示数据的时候我们并不希望仅仅将数据简简单单显示,还希望用一定的格式来显示,那么就可以设置这个属性,在显示的时候我们用到了一个HyperLinkField,用来显示一个超级链接,它的设置如