在项目中主要用了gridview来显示数据,其中的方法都是常用的。
1、利用sqldatasource动态邦定数据,其中sqldatasource1是托放在页面的sqldatasource控件,将数据邦定到gridview1上面
void
gridviewband() {
try
{
SqlDataSource1.ConnectionString
=
ConfigurationSettings.AppSettings[
"
sqlconn
"
];
SqlDataSource1.SelectCommand
=
squerysql;
GridView1.DataSource
=
SqlDataSource1;
GridView1.DataBind();
//
看有没有数据 如果没有数据 提示错误 lblresult的text的内容是错误信息
int
count
=
GridView1.Rows.Count;
if
(count
==
0
) { lblresult.Visible
=
true
; }
else
{ lblresult.Visible
=
false
; }
}
catch
(SqlException ex5)
{
//
提示错误信息
}
finally
{
}
}
2、选择一行,获取关键字,然后传到其他页面
protected
void
GridView1_SelectedIndexChanged(
object
sender, EventArgs e)
{
//
选择某一行
Session[
"
selectkey
"
]
=
GridView1.SelectedDataKey.Value;
Response.Redirect(
"
~/employee/employeedetail.aspx
"
);
}
3、获取编辑行的关键字
protected
void
GridView1_RowEditing(
object
sender, GridViewEditEventArgs e)
{
//
编辑修改
Session[
"
editkey
"
]
=
GridView1.DataKeys[e.NewEditIndex].Value.ToString();
Response.Redirect(
"
~/employee/employeeedit.aspx
"
);
}
4、删除一行,获取关键字。这个地方还是用rowdeleting 事件。
protected
void
GridView1_RowDeleting(
object
sender, GridViewDeleteEventArgs e)
{
String idno111
=
GridView1.DataKeys[e.RowIndex].Value.ToString();
SqlDataSource1.DeleteCommand
=
"
delete from empinfo where empnum='
"
+
idno111
+
"
'
"
+
"
delete from employee where empnum='
"
+
idno111
+
"
'
"
;
//
删除行
if
(e.RowIndex
>=
0
)
{
String connectstr
=
ConfigurationSettings.AppSettings[
"
sqlconn
"
];
SqlConnection sqlconn
=
new
SqlConnection(connectstr);
sqlconn.Open();
SqlCommand comm
=
new
SqlCommand(SqlDataSource1.DeleteCommand, sqlconn);
comm.ExecuteNonQuery();
sqlconn.Close();
}
}
5、删除前提示关键字,不仅仅是提示“确认删除吗?” 而是提示“确认删除关键字是***的数据吗?”
首先在aspx文件脚本里面要设置 重要看的是gridview的标签里面要有
DatakeyNames="关键字" 同时 CommandArgument='<%# Eval("departno") %>' 这两处要填写
<
asp:GridView
ID
="GridView1"
runat
="server"
AllowPaging
="True"
AutoGenerateColumns
="False"
CellPadding
="4"
DataKeyNames
="departno"
DataSourceID
="SqlDataSource1"
ForeColor
="#333333"
GridLines
="None"
OnDataBound
="CustomersGridView_DataBound"
OnRowDeleting
="GridView1_RowDeleting"
OnRowEditing
="GridView1_RowEditing"
OnSelectedIndexChanged
="GridView1_SelectedIndexChanged"
PageSize
="15"
Width
="800px"
OnRowDataBound
="GridView1_RowDataBound"
>
<
FooterStyle
BackColor
="#507CD1"
Font-Bold
="True"
ForeColor
="White"
/>
<
Columns
>
<
asp:BoundField
DataField
="departno"
HeaderText
="部门编号"
SortExpression
="departno"
/>
<
asp:BoundField
DataField
="father"
HeaderText
="父级部门"
SortExpression
="father"
/>
<
asp:BoundField
DataField
="departname"
HeaderText
="部门名称"
SortExpression
="departname"
/>
<
asp:BoundField
DataField
="person"
HeaderText
="联系人"
SortExpression
="person"
/>
<
asp:BoundField
DataField
="tel"
HeaderText
="固定电话"
SortExpression
="tel"
/>
<
asp:BoundField
DataField
="mobiletel"
HeaderText
="手机"
SortExpression
="mobiletel"
/>
<
asp:CommandField
ButtonType
="Image"
HeaderText
="查看"
SelectImageUrl
="~/icons/look.gif"
SelectText
="查看"
ShowSelectButton
="True"
>
<
HeaderStyle
HorizontalAlign
="Center"
/>
<
ItemStyle
HorizontalAlign
="Center"
/>
</
asp:CommandField
>
<
asp:CommandField
ButtonType
="Image"
EditImageUrl
="~/icons/edit.gif"
EditText
="编辑"
HeaderText
="编辑"
ShowEditButton
="True"
>
<
HeaderStyle
HorizontalAlign
="Center"
/>
<
ItemStyle
HorizontalAlign
="Center"
/>
</
asp:CommandField
>
<
asp:TemplateField
HeaderText
="删除"
ShowHeader
="False"
>
<
ItemStyle
HorizontalAlign
="Center"
/>
<
HeaderStyle
HorizontalAlign
="Center"
/>
<
ItemTemplate
>
<
asp:ImageButton
ID
="ImageButton1"
runat
="server"
CausesValidation
="False"
CommandName
="Delete"
ImageUrl
="~/icons/delete.gif"
CommandArgument
='<%#
Eval("departno") %
>
' Text="删除" />
</
ItemTemplate
>
</
asp:TemplateField
>
</
Columns
>
<
PagerTemplate
>
<
table
width
="100%"
>
<
tr
>
<
td
width
="70%"
>
<
asp:Label
ID
="MessageLabel"
runat
="server"
Font-Size
="Larger"
ForeColor
="Black"
Text
="页码:"
></
asp:Label
>
<
asp:DropDownList
ID
="PageDropDownList"
runat
="server"
AutoPostBack
="true"
OnSelectedIndexChanged
="PageDropDownList_SelectedIndexChanged"
>
</
asp:DropDownList
>
<
asp:LinkButton
ID
="linkBtnFirst"
runat
="server"
CommandArgument
="First"
CommandName
="Page"
ForeColor
="Black"
>
首页
</
asp:LinkButton
>
<
asp:LinkButton
ID
="linkBtnPrev"
runat
="server"
CommandArgument
="Prev"
CommandName
="Page"
ForeColor
="Black"
>
上一页
</
asp:LinkButton
>
<
asp:LinkButton
ID
="linkBtnNext"
runat
="server"
CommandArgument
="Next"
CommandName
="Page"
ForeColor
="Black"
>
下一页
</
asp:LinkButton
>
<
asp:LinkButton
ID
="linkBtnLast"
runat
="server"
CommandArgument
="Last"
CommandName
="Page"
ForeColor
="Black"
>
末页
</
asp:LinkButton
>
</
td
>
<
td
align
="right"
width
="70%"
>
<
asp:Label
ID
="CurrentPageLabel"
runat
="server"
ForeColor
="black"
></
asp:Label
>
</
td
>
</
tr
>
</
table
>
</
PagerTemplate
>
<
RowStyle
BackColor
="#EFF3FB"
/>
<
EditRowStyle
BackColor
="#2461BF"
/>
<
SelectedRowStyle
BackColor
="#D1DDF1"
Font-Bold
="True"
ForeColor
="#333333"
/>
<
PagerStyle
BackColor
="#2461BF"
ForeColor
="White"
HorizontalAlign
="Center"
/>
<
HeaderStyle
BackColor
="#507CD1"
Font-Bold
="True"
ForeColor
="White"
/>
<
AlternatingRowStyle
BackColor
="White"
/>
</
asp:GridView
>
然后在cs页面里填入事件:
//
删除某一行的时候要提示关键字 不仅是提示确认删除,departno是关键字
protected
void
GridView1_RowDataBound(
object
sender, GridViewRowEventArgs e)
{
if
(e.Row.RowType
==
DataControlRowType.DataRow)
{
ImageButton l
=
(ImageButton)e.Row.FindControl(
"
ImageButton1
"
);
l.Attributes.Add(
"
onclick
"
,
"
javascript:return
"
+
"
confirm('确认要删除部门编号为
"
+
DataBinder.Eval(e.Row.DataItem,
"
departno
"
)
+
"
的部门吗?
"
+
"
')
"
);
}
}
}
这样删除的时候就能提示关键字了。
6、显示页码
显示页码要在aspx代码里填入几行数据,上面的代码已经有了 重新写一下:
代码放在 </Columns>下面
<
PagerTemplate
>
<
table
width
="100%"
>
<
tr
>
<
td
width
="70%"
>
<
asp:Label
ID
="MessageLabel"
runat
="server"
Font-Size
="Larger"
ForeColor
="Black"
Text
="页码:"
></
asp:Label
>
<
asp:DropDownList
ID
="PageDropDownList"
runat
="server"
AutoPostBack
="true"
OnSelectedIndexChanged
="PageDropDownList_SelectedIndexChanged"
>
</
asp:DropDownList
>
<
asp:LinkButton
ID
="linkBtnFirst"
runat
="server"
CommandArgument
="First"
CommandName
="Page"
ForeColor
="Black"
>
首页
</
asp:LinkButton
>
<
asp:LinkButton
ID
="linkBtnPrev"
runat
="server"
CommandArgument
="Prev"
CommandName
="Page"
ForeColor
="Black"
>
上一页
</
asp:LinkButton
>
<
asp:LinkButton
ID
="linkBtnNext"
runat
="server"
CommandArgument
="Next"
CommandName
="Page"
ForeColor
="Black"
>
下一页
</
asp:LinkButton
>
<
asp:LinkButton
ID
="linkBtnLast"
runat
="server"
CommandArgument
="Last"
CommandName
="Page"
ForeColor
="Black"
>
末页
</
asp:LinkButton
>
</
td
>
<
td
align
="right"
width
="70%"
>
<
asp:Label
ID
="CurrentPageLabel"
runat
="server"
ForeColor
="black"
></
asp:Label
>
</
td
>
</
tr
>
</
table
>
</
PagerTemplate
>
然后在gridview的标签里面填入
OnDataBound="CustomersGridView_DataBound"
位置看 5 的代码就可以了。
然后再 cs代码区加入如下代码
//
显示页码
protected
void
PageDropDownList_SelectedIndexChanged(Object sender, EventArgs e)
{
GridViewRow pagerRow
=
GridView1.BottomPagerRow;
DropDownList pageList
=
(DropDownList)pagerRow.Cells[
0
].FindControl(
"
PageDropDownList
"
);
GridView1.PageIndex
=
pageList.SelectedIndex;
}
protected
void
CustomersGridView_DataBound(Object sender, EventArgs e)
{
try
{
GridViewRow pagerRow
=
GridView1.BottomPagerRow;
LinkButton linkBtnFirst
=
(LinkButton)pagerRow.Cells[
0
].FindControl(
"
linkBtnFirst
"
);
LinkButton linkBtnPrev
=
(LinkButton)pagerRow.Cells[
0
].FindControl(
"
linkBtnPrev
"
);
LinkButton linkBtnNext
=
(LinkButton)pagerRow.Cells[
0
].FindControl(
"
linkBtnNext
"
);
LinkButton linkBtnLast
=
(LinkButton)pagerRow.Cells[
0
].FindControl(
"
linkBtnLast
"
);
if
(GridView1.PageIndex
==
0
)
{
linkBtnFirst.Enabled
=
false
;
linkBtnPrev.Enabled
=
false
;
}
else
if
(GridView1.PageIndex
==
GridView1.PageCount
-
1
)
{
linkBtnLast.Enabled
=
false
;
linkBtnNext.Enabled
=
false
;
}
else
if
(GridView1.PageCount
<=
0
)
{
linkBtnFirst.Enabled
=
false
;
linkBtnPrev.Enabled
=
false
;
linkBtnNext.Enabled
=
false
;
linkBtnLast.Enabled
=
false
;
}
DropDownList pageList
=
(DropDownList)pagerRow.Cells[
0
].FindControl(
"
PageDropDownList
"
);
Label pageLabel
=
(Label)pagerRow.Cells[
0
].FindControl(
"
CurrentPageLabel
"
);
if
(pageList
!=
null
)
{
for
(
int
i
=
0
; i
<
GridView1.PageCount; i
++
)
{
int
pageNumber
=
i
+
1
;
ListItem item
=
new
ListItem(pageNumber.ToString()
+
"
/
"
+
GridView1.PageCount.ToString(), pageNumber.ToString());
if
(i
==
GridView1.PageIndex)
{
item.Selected
=
true
;
}
pageList.Items.Add(item);
}
}
if
(pageLabel
!=
null
)
{
int
currentPage
=
GridView1.PageIndex
+
1
;
pageLabel.Text
=
"
当前页:
"
+
currentPage.ToString()
+
"
/
"
+
GridView1.PageCount.ToString();
}
}
catch
{
Response.Write(
"
现在还没有该部门的记录!!
"
);
}
}
如果发生异常,是应为没有数据。这时候可以在catch里面提示没有数据。这样就可以绑定页码了。
但是这样做的条件是没有把绑定数据放在 (!ispostback)里面,如果放在里面了,就会出问题
因为页面的代码实际上是控制显示第几页。但是绑定数据放在了!ispostback里面了,所以不能重新绑定。
这样的情况,要写那个绑定的方法。
然后在cs文件里写下面的代码:
protected
void
PageDropDownList_SelectedIndexChanged(Object sender, EventArgs e)
{
GridViewRow pagerRow
=
GridView1.BottomPagerRow;
DropDownList pageList
=
(DropDownList)pagerRow.Cells[
0
].FindControl(
"
PageDropDownList
"
);
GridView1.PageIndex
=
pageList.SelectedIndex;
gridviewband();
///
重新绑定数据,这是特殊的地方
}
protected
void
CustomersGridView_DataBound(Object sender, EventArgs e)
{
try
{
GridViewRow pagerRow
=
GridView1.BottomPagerRow;
LinkButton linkBtnFirst
=
(LinkButton)pagerRow.Cells[
0
].FindControl(
"
linkBtnFirst
"
);
LinkButton linkBtnPrev
=
(LinkButton)pagerRow.Cells[
0
].FindControl(
"
linkBtnPrev
"
);
LinkButton linkBtnNext
=
(LinkButton)pagerRow.Cells[
0
].FindControl(
"
linkBtnNext
"
);
LinkButton linkBtnLast
=
(LinkButton)pagerRow.Cells[
0
].FindControl(
"
linkBtnLast
"
);
if
(GridView1.PageIndex
==
0
)
{
linkBtnFirst.Enabled
=
false
;
linkBtnPrev.Enabled
=
false
;
}
else
if
(GridView1.PageIndex
==
GridView1.PageCount
-
1
)
{
linkBtnLast.Enabled
=
false
;
linkBtnNext.Enabled
=
false
;
}
else
if
(GridView1.PageCount
<=
0
)
{
linkBtnFirst.Enabled
=
false
;
linkBtnPrev.Enabled
=
false
;
linkBtnNext.Enabled
=
false
;
linkBtnLast.Enabled
=
false
;
}
DropDownList pageList
=
(DropDownList)pagerRow.Cells[
0
].FindControl(
"
PageDropDownList
"
);
Label pageLabel
=
(Label)pagerRow.Cells[
0
].FindControl(
"
CurrentPageLabel
"
);
if
(pageList
!=
null
)
{
for
(
int
i
=
0
; i
<
GridView1.PageCount; i
++
)
{
int
pageNumber
=
i
+
1
;
ListItem item
=
new
ListItem(pageNumber.ToString()
+
"
/
"
+
GridView1.PageCount.ToString(), pageNumber.ToString());
if
(i
==
GridView1.PageIndex)
{
item.Selected
=
true
;
}
pageList.Items.Add(item);
}
}
if
(pageLabel
!=
null
)
{
int
currentPage
=
GridView1.PageIndex
+
1
;
pageLabel.Text
=
"
当前页:
"
+
currentPage.ToString()
+
"
/
"
+
GridView1.PageCount.ToString();
}
}
catch
//
(Exception ex5)
{
Response.Write(
"
现在还没有该部门的记录!!
"
);
}
}
protected
void
GridView1_PageIndexChanging(
object
sender, GridViewPageEventArgs e)
{
GridView1.PageIndex
=
e.NewPageIndex;
gridviewband();
//
重新绑定数据
}
这样就可以显示了 如果按照前面的方法会提示没有 pageindexchanging事件。