DataGrid数据控件是3个数据控件中功能最强大的一个。使用DataGrid控件可以自动显示表的内容。利用DataReader对象或者DataSet对象和DataGrid控件进行绑定,就可以进行数据输出。
1、利用DataGrid控件实现分页
<
asp:DataGrid ID
=
"
dg
"
runat
=
"
server
"
AllowPaging
=
"
True
"
BorderColor
=
"
Black
"
CellPadding
=
"
2
"
OnPageIndexChanged
=
"
ChangePage
"
PageSize
=
"
5
"
>
<
PagerStyle HorizontalAlign
=
"
Right
"
NextPageText
=
"
后页
"
PrevPageText
=
"
前页
"
/>
<
AlternatingItemStyle BackColor
=
"
#FFFFCD
"
/>
<
HeaderStyle BackColor
=
"
#AAAADD
"
/>
</
asp:DataGrid
>
protected
void
Page_Load(
object
sender, EventArgs e)
{
BindGrid();
}
private
void
BindGrid()
{
string
Provider, DataBase, ConnStr, SQL;
Provider
=
"
Microsoft.Jet.OLEDB.4.0;
"
;
DataBase
=
Server.MapPath(
"
person.mdb
"
);
ConnStr
=
"
Provider=
"
+
Provider
+
"
Data Source=
"
+
DataBase;
SQL
=
"
select * from grade
"
;
OleDbDataAdapter da;
da
=
new
OleDbDataAdapter(SQL, ConnStr);
DataSet ds
=
new
DataSet();
da.Fill(ds,
"
grade
"
);
dg.DataSource
=
ds.Tables[
"
grade
"
].DefaultView;
dg.DataBind();
}
public
void
ChangePage(
object
sender, DataGridPageChangedEventArgs e)
{
dg.CurrentPageIndex
=
e.NewPageIndex;
BindGrid();
}
可以把前页和后页改成数字显示。修改为PagerStyle-Mode="NumericPages"可以实现数字显示。
一般用表格显示数据的时候,将某列显示成超级链接的形式,用来进一步显示该记录的详细信息。
利用HyperLinkColumn控件设置显示链接的列,DataNavigateUrlField属性表示链接的字段,DataNavigateUrlFormatString属性表示链接的地址。
<
asp:DataGrid ID
=
"
dg
"
runat
=
"
server
"
AllowPaging
=
"
True
"
BorderColor
=
"
Black
"
CellPadding
=
"
2
"
OnPageIndexChanged
=
"
ChangePage
"
PageSize
=
"
5
"
AutoGenerateColumns
=
"
False
"
>
<
PagerStyle HorizontalAlign
=
"
Right
"
NextPageText
=
"
后页
"
PrevPageText
=
"
前页
"
Mode
=
"
NumericPages
"
/>
<
AlternatingItemStyle BackColor
=
"
#FFFFCD
"
/>
<
HeaderStyle BackColor
=
"
#AAAADD
"
/>
<
Columns
>
<
asp:HyperLinkColumn DataTextField
=
"
学号
"
HeaderText
=
"
学号
"
DataNavigateUrlField
=
"
学号
"
DataNavigateUrlFormatString
=
"
test.aspx?id={0}
"
Target
=
"
_blank
"
/>
<
asp:BoundColumn DataField
=
"
姓名
"
HeaderText
=
"
姓名
"
/>
<
asp:BoundColumn DataField
=
"
数学
"
HeaderText
=
"
数学成绩
"
ItemStyle
-
HorizontalAlign
=
"
Right
"
/>
</
Columns
>
</
asp:DataGrid
>
protected
void
Page_Load(
object
sender, EventArgs e)
{
BindGrid();
}
private
void
BindGrid()
{
string
Provider, DataBase, ConnStr, SQL;
Provider
=
"
Microsoft.Jet.OLEDB.4.0;
"
;
DataBase
=
Server.MapPath(
"
person.mdb
"
);
ConnStr
=
"
Provider=
"
+
Provider
+
"
Data Source=
"
+
DataBase;
SQL
=
"
select * from grade
"
;
OleDbDataAdapter da;
da
=
new
OleDbDataAdapter(SQL, ConnStr);
DataSet ds
=
new
DataSet();
da.Fill(ds,
"
grade
"
);
dg.DataSource
=
ds.Tables[
"
grade
"
].DefaultView;
dg.DataBind();
}
public
void
ChangePage(
object
sender, DataGridPageChangedEventArgs e)
{
dg.CurrentPageIndex
=
e.NewPageIndex;
BindGrid();
}
//
当单击某一行超级链接时,自动弹出新网页,调用程序test.aspx
protected
void
Page_Load(
object
sender, EventArgs e)
{
OleDbConnection Conn;
Conn
=
new
OleDbConnection(
"
Provider=Microsoft.Jet.OLEDB.4.0;
"
+
"
Data Source=
"
+
Server.MapPath(
"
person.mdb
"
));
Conn.Open();
string
strSQL
=
"
select * from grade where 学号=
"
+
Request[
"
id
"
];
OleDbCommand Comm
=
new
OleDbCommand(strSQL, Conn);
OleDbDataReader dr
=
Comm.ExecuteReader();
string
html
=
"
"
;
while
(dr.Read())
{
html
+=
"
<h1>学员:
"
;
html
+=
"
<font color=red>
"
+
dr[
"
姓名
"
].ToString()
+
"
</font>的成绩为:</h1><br>
"
;
html
+=
"
学号为:
"
+
dr[
"
学号
"
].ToString()
+
"
<br>
"
;
html
+=
"
数学成绩为:
"
+
dr[
"
数学
"
].ToString()
+
"
<br>
"
;
html
+=
""
;
}
Response.Write(html);
Conn.Close();
}
2、利用DataGrid控件动态添加数据
public
partial
class
_Default : System.Web.UI.Page
{
OleDbConnection Conn;
protected
void
Page_Load(
object
sender, EventArgs e)
{
string
Provider, DataBase, ConnStr, SQL;
Provider
=
"
Microsoft.Jet.OLEDB.4.0;
"
;
DataBase
=
Server.MapPath(
"
person.mdb
"
);
ConnStr
=
"
Provider=
"
+
Provider
+
"
Data Source=
"
+
DataBase;
Conn
=
new
OleDbConnection(ConnStr);
if
(
!
IsPostBack) BindGrid();
}
private
void
BindGrid()
{
OleDbDataAdapter da
=
new
OleDbDataAdapter(
"
select * from grade
"
, Conn);
DataSet ds
=
new
DataSet();
da.Fill(ds);
dg.DataSource
=
ds;
dg.DataBind();
}
public
void
ChangePage(
object
sender, DataGridPageChangedEventArgs e)
{
dg.CurrentPageIndex
=
e.NewPageIndex;
BindGrid();
}
public
void
Add_Click(
object
sender, EventArgs E)
{
String strSQL
=
"
insert into grade values(
"
+
id.Text
+
"
,'
"
+
sex.Text
+
"
','
"
+
name.Text
+
"
',
"
+
yuwen.Text
+
"
,
"
+
math.Text
+
"
,
"
+
english.Text
+
"
)
"
;
OleDbCommand Comm
=
new
OleDbCommand(strSQL, Conn);
Conn.Open();
try
{
Comm.ExecuteNonQuery();
Message.InnerHtml
=
"
<b>添加成功</b>
"
;
}
catch
(OleDbException)
{
Message.InnerHtml
=
"
添加失败
"
;
Message.Style[
"
color
"
]
=
"
red
"
;
}
Conn.Close();
BindGrid();
}
}
<
form id
=
"
form1
"
runat
=
"
server
"
>
<
table width
=
"
95%
"
>
<
tr
>
<
td valign
=
"
top
"
>
<
asp:DataGrid ID
=
"
dg
"
runat
=
"
server
"
BorderColor
=
"
Black
"
CellPadding
=
"
3
"
OnPageIndexChanged
=
"
ChangePage
"
PageSize
=
"
5
"
AutoGenerateColumns
=
"
False
"
BackColor
=
"
#CCCCFF
"
Font
-
Names
=
"
Verdana
"
Font
-
Size
=
"
9pt
"
Width
=
"
400px
"
>
<
PagerStyle HorizontalAlign
=
"
Right
"
NextPageText
=
"
后页
"
PrevPageText
=
"
前页
"
Mode
=
"
NumericPages
"
/>
<
HeaderStyle BackColor
=
"
#AAAADD
"
/>
<
Columns
>
<
asp:BoundColumn DataField
=
"
学号
"
HeaderText
=
"
学号
"
/>
<
asp:BoundColumn DataField
=
"
性别
"
HeaderText
=
"
性别
"
/>
<
asp:BoundColumn DataField
=
"
姓名
"
HeaderText
=
"
姓名
"
/>
<
asp:BoundColumn DataField
=
"
语文
"
HeaderText
=
"
语文
"
/>
<
asp:BoundColumn DataField
=
"
数学
"
HeaderText
=
"
数学
"
/>
<
asp:BoundColumn DataField
=
"
英语
"
HeaderText
=
"
英语
"
/>
</
Columns
>
</
asp:DataGrid
>
</
td
>
<
td valign
=
"
top
"
>
<
table style
=
"
font:8pt verdana
"
>
<
tr
>
<
td colspan
=
"
2
"
bgcolor
=
"
#aaaadd
"
style
=
"
font:10pt verdana
"
>
添加新的学员:
</
td
>
</
tr
>
<
tr
><
td nowrap
>
学号:
</
td
>
<
td
><
asp:TextBox ID
=
"
id
"
runat
=
"
server
"
/></
td
>
</
tr
>
<
tr
><
td nowrap
>
性别:
</
td
>
<
td
><
asp:TextBox ID
=
"
sex
"
runat
=
"
server
"
/></
td
>
</
tr
>
<
tr
><
td nowrap
>
姓名:
</
td
>
<
td
><
asp:TextBox ID
=
"
name
"
runat
=
"
server
"
/></
td
>
</
tr
>
<
tr
><
td nowrap
>
语文:
</
td
>
<
td
><
asp:TextBox ID
=
"
yuwen
"
runat
=
"
server
"
/></
td
>
</
tr
>
<
tr
><
td nowrap
>
数学:
</
td
>
<
td
><
asp:TextBox ID
=
"
math
"
runat
=
"
server
"
/></
td
>
</
tr
>
<
tr
><
td nowrap
>
英语:
</
td
>
<
td
><
asp:TextBox ID
=
"
english
"
runat
=
"
server
"
/></
td
>
</
tr
>
<
tr
><
td colspan
=
"
2
"
style
=
"
padding-top:15
"
align
=
"
center
"
>
<
asp:Button Text
=
"
添加
"
OnClick
=
"
Add_Click
"
runat
=
"
Server
"
/></
td
>
</
tr
>
<
tr
><
td colspan
=
"
2
"
style
=
"
padding-top:15
"
align
=
"
center
"
>
<
span id
=
"
Message
"
style
=
"
font:arial 11pt;
"
runat
=
"
server
"
/></
td
></
tr
>
</
table
>
</
td
>
</
tr
>
</
table
>
</
form
>
3、使用DataGrid控件动态操作数据
public
partial
class
_Default : System.Web.UI.Page
{
OleDbConnection Conn;
protected
void
Page_Load(
object
sender, EventArgs e)
{
string
Provider, DataBase, ConnStr;
Provider
=
"
Microsoft.Jet.OLEDB.4.0;
"
;
DataBase
=
Server.MapPath(
"
person.mdb
"
);
ConnStr
=
"
Provider=
"
+
Provider
+
"
Data Source=
"
+
DataBase;
Conn
=
new
OleDbConnection(ConnStr);
if
(
!
IsPostBack) BindGrid();
}
private
void
BindGrid()
{
OleDbDataAdapter da
=
new
OleDbDataAdapter(
"
select * from grade order by 学号
"
, Conn);
DataSet ds
=
new
DataSet();
da.Fill(ds);
dg.DataSource
=
ds;
dg.DataBind();
}
public
void
DataGrid_Edit(
object
sender, DataGridCommandEventArgs e)
{
dg.EditItemIndex
=
(
int
)e.Item.ItemIndex;
BindGrid();
}
public
void
DataGrid_Cancel(
object
sender, DataGridCommandEventArgs e)
{
dg.EditItemIndex
=
-
1
;
BindGrid();
}
public
void
DataGrid_Update(
object
sender, DataGridCommandEventArgs e)
{
string
strSQL
=
"
update grade set
"
+
"
姓名='
"
+
((TextBox)e.Item.Cells[
3
].Controls[
0
]).Text
+
"
',数学=
"
+
((TextBox)e.Item.Cells[
4
].Controls[
0
]).Text
+
"
where 学号=
"
+
dg.DataKeys[(
int
)e.Item.ItemIndex];
OleDbCommand cm
=
new
OleDbCommand(strSQL, Conn);
Conn.Open();
try
{
cm.ExecuteNonQuery();
Message.InnerHtml
=
"
<b>编辑成功</b>
"
;
dg.EditItemIndex
=
-
1
;
}
catch
(OleDbException)
{
Message.InnerHtml
=
"
编辑失败
"
;
Message.Style[
"
color
"
]
=
"
red
"
;
}
cm.Connection.Close();
BindGrid();
}
public
void
DataGrid_Delete(
object
sender, DataGridCommandEventArgs e)
{
string
strSQL
=
"
delete from grade where 学号=
"
+
dg.DataKeys[(
int
)e.Item.ItemIndex];
OleDbCommand cm
=
new
OleDbCommand(strSQL, Conn);
Conn.Open();
try
{
cm.ExecuteNonQuery();
Message.InnerHtml
=
"
<b>删除成功</b>
"
;
}
catch
(OleDbException)
{
Message.InnerHtml
=
"
<b>删除失败</b>
"
;
Message.Style[
"
color
"
]
=
"
red
"
;
}
Conn.Close();
BindGrid();
}
}
<
form id
=
"
form1
"
runat
=
"
server
"
>
<
asp:DataGrid ID
=
"
dg
"
runat
=
"
server
"
Width
=
"
400
"
BackColor
=
"
#ccccff
"
BorderColor
=
"
black
"
ShowFooter
=
"
false
"
CellPadding
=
"
3
"
CellSpacing
=
"
0
"
Font
-
Name
=
"
Verdana
"
Font
-
Size
=
"
8pt
"
HeaderStyle
-
BackColor
=
"
#aaaadd
"
DataKeyField
=
"
学号
"
AutoGenerateColumns
=
"
false
"
OnEditCommand
=
"
DataGrid_Edit
"
OnCancelCommand
=
"
DataGrid_Cancel
"
OnUpdateCommand
=
"
DataGrid_Update
"
OnDeleteCommand
=
"
DataGrid_Delete
"
>
<
Columns
>
<
asp:EditCommandColumn EditText
=
"
编辑
"
CancelText
=
"
取消
"
UpdateText
=
"
更新
"
ItemStyle
-
Wrap
=
"
false
"
/>
<
asp:ButtonColumn Text
=
"
删除
"
CommandName
=
"
Delete
"
ItemStyle
-
Wrap
=
"
false
"
/>
<
asp:BoundColumn HeaderText
=
"
学号
"
DataField
=
"
学号
"
ReadOnly
=
"
true
"
/>
<
asp:BoundColumn HeaderText
=
"
姓名
"
DataField
=
"
姓名
"
/>
<
asp:BoundColumn HeaderText
=
"
数学
"
DataField
=
"
数学
"
/>
</
Columns
>
</
asp:DataGrid
>
<
span id
=
"
Message
"
style
=
"
font:arial 11pt;
"
runat
=
"
Server
"
/>
</
form
>
程序中利用ItemStyle-Wrap="false"语句设置不折行显示,利用DataKeyField="学号"语句设置关键字段是学号,因此可以利用dg.DataKeys[(int)e.item.ItemIndex]取出某行的学号。取其行的其它列时,使用((TextBox)e.Item.Cells[3].Controls[0]).Text语句,e中存储当前的所有对象,通过表格和控件的定位,得到文本框的值。