本文提供一个综合实现GridView 插入、删除、修改的例子,本例子不依赖GridView的内置功能,完全采取自定义的做法,更能符合操作习惯。当然,本例子增加排序、分页的功能也非常简单,因为GridView显示的数据只是当前页的数据,所以,不影响分页。效果如图:
完整的源代码:
ASPX 代码
<%
@ Page Language
=
"
C#
"
AutoEventWireup
=
"
true
"
EnableViewState
=
"
true
"
%>
<% @ Import Namespace = " System.Data " %>
<% @ Import Namespace = " System.Data.OleDb " %>
< script runat ="server" >
private int EditId = 0 ;
private String ConnectionString = @ " Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|/ASPNET20Book.mdb; " ;
// / <summary>
// / 显示图片,在图片不存在时显示一个 none.gif
// / </summary>
// / <param name="pathPhoto"></param>
// / <returns></returns>
private string GetUserPhoto(object pathPhoto)
{
if (pathPhoto == DBNull.Value)
{
return " <img src='Images/none.gif'> " ;
}
else
{
return " <img src=' " + pathPhoto.ToString() + " '> " ;
}
}
// / <summary>
// / 数据绑定的处理。在需要编辑时,显示出编辑框
// / </summary>
// / <param name="sender"></param>
// / <param name="e"></param>
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (EditId > 0 )
{
// 如果绑定数据源是DatarReader,则使用下面的方法:
// System.Data.Common.DbDataRecord rowItem = (System.Data.Common.DbDataRecord)e.Row.DataItem;
// 如果绑定是 DataView,则使用此方法
System.Data.DataRowView rowItem = (System.Data.DataRowView)e.Row.DataItem;
if (rowItem[ " id " ].ToString().Equals(EditId.ToString()))
{
// 隐藏显示的文字
PlaceHolder LabelTitle = e.Row.FindControl( " LabelTitle " ) as PlaceHolder;
LabelTitle.Visible = false ;
PlaceHolder LabelBirthday = e.Row.FindControl( " LabelBirthday " ) as PlaceHolder;
LabelBirthday.Visible = false ;
PlaceHolder LabelGender = e.Row.FindControl( " LabelGender " ) as PlaceHolder;
LabelGender.Visible = false ;
PlaceHolder LabelClassName = e.Row.FindControl( " LabelClassName " ) as PlaceHolder;
LabelClassName.Visible = false ;
PlaceHolder LabelPhoto = e.Row.FindControl( " LabelPhoto " ) as PlaceHolder;
LabelPhoto.Visible = false ;
// 打开编辑框
TextBox uTitle = e.Row.FindControl( " uTitle " ) as TextBox;
uTitle.Visible = true ;
TextBox uBirthDay = e.Row.FindControl( " uBirthDay " ) as TextBox;
uBirthDay.Visible = true ;
RadioButtonList uGender = e.Row.FindControl( " uGender " ) as RadioButtonList;
uGender.Visible = true ;
DropDownList uClassName = e.Row.FindControl( " uClassName " ) as DropDownList;
uClassName.Visible = true ;
FileUpload uPhoto = e.Row.FindControl( " uPhoto " ) as FileUpload;
uPhoto.Visible = true ;
// 赋原来的值
if (rowItem[ " Gender " ] != DBNull.Value)
{
uGender.SelectedIndex = (Convert.ToBoolean(rowItem[ " Gender " ]) ? 0 : 1 );
}
if (rowItem[ " ClassName " ] != DBNull.Value)
{
uClassName.Items.FindByText(rowItem[ " ClassName " ].ToString()).Selected = true ;
}
// 显示编辑更新按钮
Panel PanelNormal = e.Row.FindControl( " PanelNormal " ) as Panel;
PanelNormal.Visible = false ;
Panel PanelUpdate = e.Row.FindControl( " PanelUpdate " ) as Panel;
PanelUpdate.Visible = true ;
}
}
}
}
// / <summary>
// / 打开编辑框,将编辑标识传递到 EditId
// / </summary>
// / <param name="sender"></param>
// / <param name="e"></param>
protected void EditClick(object sender, EventArgs e)
{
Button b = sender as Button;
EditId = Convert.ToInt32(b.CommandArgument);
GridViewRow dvr = b.NamingContainer as GridViewRow;
EditId = ( int )GridView1.DataKeys[dvr.DataItemIndex].Value;
DataBind();
// Response.Write(GridView1.DataKeys[dvr.DataItemIndex].Value);
}
// / <summary>
// / 将编辑的数据保存
// / </summary>
// / <param name="sender"></param>
// / <param name="e"></param>
protected void UpdateClick(object sender, EventArgs e)
{
Button b = sender as Button;
GridViewRow dvr = b.NamingContainer as GridViewRow;
TextBox uTitle = dvr.FindControl( " uTitle " ) as TextBox;
string StudentTitle = uTitle.Text;
string StudentBirthDay = ((TextBox)dvr.FindControl( " uBirthDay " )).Text;
bool StudentGender = ((RadioButtonList)dvr.FindControl( " uGender " )).SelectedValue == " 男 " ? true : false ;
string StudentClassName = ((DropDownList)dvr.FindControl( " uClassName " )).SelectedValue;
string StudentID = GridView1.DataKeys[dvr.RowIndex].Value.ToString();
string sql = "" ;
String PhotoPath = "" ;
bool HasFileUploaded = false ;
FileUpload oUpload = (FileUpload)dvr.FindControl( " uPhoto " );
if (oUpload.HasFile)
{
PhotoPath = Guid.NewGuid().ToString( " D " ) + System.IO.Path.GetExtension(oUpload.FileName);
oUpload.SaveAs(Server.MapPath( " ~ " ) + " // " + PhotoPath);
HasFileUploaded = true ;
}
if (HasFileUploaded)
{
sql = " Update Student Set Title=@Title,BirthDay = @BirthDay, " ;
sql += " Gender=@Gender,PhotoPath=@PhotoPath,ClassName=@ClassName Where id=@id " ;
}
else
{
sql = " Update Student Set Title=@Title,BirthDay = @BirthDay, " ;
sql += " Gender=@Gender,ClassName=@ClassName Where id=@id " ;
}
OleDbConnection cn = new OleDbConnection(ConnectionString);
cn.Open();
OleDbCommand cmd = new OleDbCommand(sql, cn);
cmd.Parameters.AddWithValue( " @Title " , StudentTitle);
cmd.Parameters.AddWithValue( " @BirthDay " , StudentBirthDay);
cmd.Parameters.AddWithValue( " @Gender " , StudentGender);
if (HasFileUploaded)
{
cmd.Parameters.AddWithValue( " @PhotoPath " , PhotoPath);
}
cmd.Parameters.AddWithValue( " @ClassName " , StudentClassName);
cmd.Parameters.AddWithValue( " @id " , StudentID);
cmd.ExecuteNonQuery();
cn.Close();
Response.Redirect(Request.Url.ToString());
}
// / <summary>
// / 添加新记录
// / </summary>
// / <param name="sender"></param>
// / <param name="e"></param>
protected void AddClick(object sender, EventArgs e)
{
InsertNewRecord(sender, e);
}
// / <summary>
// / 取消编辑
// / </summary>
// / <param name="sender"></param>
// / <param name="e"></param>
protected void CancelClick(object sender, EventArgs e)
{
Response.Redirect(Request.UrlReferrer.ToString());
}
// / <summary>
// / 删除记录
// / </summary>
// / <param name="sender"></param>
// / <param name="e"></param>
protected void DeleteClick(object sender, EventArgs e)
{
Button b = sender as Button;
int id = Convert.ToInt32(b.CommandArgument);
OleDbConnection cn = new OleDbConnection(ConnectionString);
cn.Open();
OleDbCommand cmd = new OleDbCommand( " Delete From [Student] Where [id]=@id " , cn);
cmd.Parameters.AddWithValue( " @id " , id);
cmd.ExecuteNonQuery();
cn.Close();
Response.Redirect(Request.Url.ToString());
}
// / <summary>
// / 插入新记录的公共函数
// / </summary>
// / <param name="sender"></param>
// / <param name="e"></param>
protected void InsertNewRecord(object sender, EventArgs e)
{
string StudentTitle = ((TextBox)(sender as Button).NamingContainer.FindControl( " NewTitle " )).Text;
if (StudentTitle.Trim() == "" )
{
ErrorMsg.Text = " 请输入姓名 " ;
return ;
}
string StudentBirthDay = ((TextBox)(sender as Button).NamingContainer.FindControl( " NewBirthDay " )).Text;
bool StudentGender = ((RadioButtonList)
(sender as Button).NamingContainer.FindControl( " NewGender " )).SelectedValue == " 男 " ? true : false ;
string StudentClassName = ((DropDownList)
(sender as Button).NamingContainer.FindControl( " NewClassName " )).SelectedValue;
FileUpload oUpload = (FileUpload)(sender as Button).NamingContainer.FindControl( " AddPhoto " );
String FileName = "" ;
FileName = Guid.NewGuid().ToString( " D " ) + System.IO.Path.GetExtension(oUpload.FileName);
oUpload.SaveAs(Server.MapPath( " ~ " ) + " // " + FileName);
string sql = " Insert Into Student (Title,BirthDay,Gender,PhotoPath,ClassName) " ;
sql += " Values(@Title,@BirthDay,@Gender,@PhotoPath,@ClassName) " ;
OleDbConnection cn = new OleDbConnection(ConnectionString);
cn.Open();
OleDbCommand cmd = new OleDbCommand(sql, cn);
cmd.Parameters.AddWithValue( " @Title " , StudentTitle);
cmd.Parameters.AddWithValue( " @BirthDay " , StudentBirthDay);
cmd.Parameters.AddWithValue( " @Gender " , StudentGender);
cmd.Parameters.AddWithValue( " @PhotoPath " , FileName);
cmd.Parameters.AddWithValue( " @ClassName " , StudentClassName);
cmd.ExecuteNonQuery();
cn.Close();
Response.Redirect(Request.FilePath.ToString());
}
// / <summary>
// / 生成 Google 样式的分页
// / </summary>
// / <param name="TotalCountRecord"></param>
// / <param name="CurrentPage"></param>
// / <param name="PageItem"></param>
// 每页显示的记录数
private int PageItem = 10 ;
private void BuildPagers( int TotalCountRecord, int CurrentPage)
{
int Step = 6 ;
int LeftNum = 0 ;
int RightNum = 0 ;
String PageUrl = " ? " ;
int PageCount = ( int )Math.Ceiling(( double )(TotalCountRecord) / PageItem);
if (CurrentPage - Step < 1 )
{
LeftNum = 1 ;
}
else
{
LeftNum = CurrentPage - Step;
}
if (CurrentPage + Step > PageCount)
{
RightNum = PageCount;
}
else
{
RightNum = CurrentPage + Step;
}
string OutPut = "" ;
for ( int i = LeftNum; i <= RightNum; i ++ )
{
if (i == CurrentPage)
{
OutPut += " <span style='color:red'> " + i.ToString() + " </span> " ;
}
else
{
OutPut += " <a href=/" " + PageUrl + " Page= " + i.ToString() + " /"> " + i.ToString() + " </a> " ;
}
}
if (CurrentPage > 1 )
{
OutPut = " <a href=' " + PageUrl + " Page=1'>首页</a> <a href=/" " + PageUrl + " Page= " + (CurrentPage - 1 ) + " /">上一页</a> " + OutPut;
}
if (CurrentPage < PageCount)
{
OutPut += " <a href=/" " + PageUrl + " Page= " + (CurrentPage + 1 ) + " /">下一页</a> <a href=' " + PageUrl + " Page= " + PageCount + " '>末页</a> " ;
}
Pager.InnerHtml = OutPut;
}
// / <summary>
// / 加载页面
// / </summary>
// / <param name="sender"></param>
// / <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
if ( ! Page.IsPostBack)
{
DataBind();
}
}
// / <summary>
// / 绑定 GridView
// / </summary>
protected void DataBind()
{
OleDbCommand cmd;
String sql;
OleDbConnection cn = new OleDbConnection(ConnectionString);
cn.Open();
// 由于是 Access 数据库,我们只进行简单的分页。对于性能要求较高的地方,请自行采取其他方法。
sql = " SELECT COUNT(*) FROM [Student] " ;
cmd = new OleDbCommand(sql, cn);
// 总的记录数
int TotalCount = Convert.ToInt32(cmd.ExecuteScalar());
// 当前页的序号
int PageIndex = 1 ;
String page = Request.QueryString[ " Page " ];
if (page == null ) page = " 1 " ;
Int32.TryParse(page, out PageIndex);
if (PageIndex < 1 ) PageIndex = 1 ;
int PageCount = ( int )Math.Ceiling(( double )(TotalCount) / PageItem);
if (PageIndex > PageCount) PageIndex = PageCount;
int startRecord = (PageIndex - 1 ) * PageItem;
sql = " SELECT * FROM [Student] ORDER BY [id] DESC " ;
OleDbDataAdapter da = new OleDbDataAdapter(sql, cn);
DataSet ds = new DataSet();
da.Fill(ds, startRecord, PageItem, " Student " );
GridView1.DataSource = ds.Tables[ 0 ].DefaultView;
GridView1.DataBind();
cn.Close();
BuildPagers(TotalCount, PageIndex);
}
</ script >
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head id ="Head1" runat ="server" >
< title > GridView 插入、删除、修改的例子 </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< asp:GridView ID ="GridView1" runat ="server" AutoGenerateColumns ="False" DataKeyNames ="id"
OnRowDataBound ="GridView1_RowDataBound" ShowFooter ="true" >
< HeaderStyle BackColor ="#ccff99" Font-Bold ="true" />
< Columns >
< asp:TemplateField HeaderText ="姓名" >
< ItemTemplate >
< asp:PlaceHolder ID ="LabelTitle" runat ="server" >
<% # Eval ( " Title " ) %> </ asp:PlaceHolder >
< asp:TextBox ID ="uTitle" runat ="server" Text ='<%#Eval("Title") % > ' Visible="false"> </ asp:TextBox >
</ ItemTemplate >
< FooterTemplate >
< asp:TextBox ID ="NewTitle" runat ="server" ></ asp:TextBox >
</ FooterTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText ="生日(yyyy-MM-dd格式)" >
< ItemTemplate >
< asp:PlaceHolder ID ="LabelBirthday" runat ="server" >
<% # Eval ( " BirthDay " , " {0:yyyy-MM-dd} " ) %> </ asp:PlaceHolder >
< asp:TextBox ID ="uBirthDay" runat ="server" Text ='<%#Eval("BirthDay", "{0:yyyy-MM-dd}")% > '
Visible="false" />
</ ItemTemplate >
< FooterTemplate >
< asp:TextBox ID ="NewBirthDay" runat ="server" ></ asp:TextBox >
</ FooterTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText ="性别" >
< ItemTemplate >
< asp:PlaceHolder ID ="LabelGender" runat ="server" >
<% #( Eval ( " Gender " )).ToString() == " True " ? " 男 " : " 女 " %> </ asp:PlaceHolder >
< asp:RadioButtonList ID ="uGender" runat ="server" RepeatDirection ="Horizontal" Visible ="false" >
< asp:ListItem Text ="男" ></ asp:ListItem >
< asp:ListItem Text ="女" ></ asp:ListItem >
</ asp:RadioButtonList >
</ ItemTemplate >
< FooterTemplate >
< asp:RadioButtonList ID ="NewGender" runat ="server" RepeatDirection ="Horizontal" >
< asp:ListItem Selected ="true" Text ="男" ></ asp:ListItem >
< asp:ListItem Text ="女" ></ asp:ListItem >
</ asp:RadioButtonList >
</ FooterTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText ="年级" >
< ItemTemplate >
< asp:PlaceHolder ID ="LabelClassName" runat ="server" >
<% # Eval ( " ClassName " ) %> </ asp:PlaceHolder >
< asp:DropDownList ID ="uClassName" runat ="server" Visible ="false" >
< asp:ListItem Text ="小学" Value ="小学" ></ asp:ListItem >
< asp:ListItem Text ="中学" Value ="中学" ></ asp:ListItem >
< asp:ListItem Text ="高中" Value ="高中" ></ asp:ListItem >
< asp:ListItem Text ="大学" Value ="大学" ></ asp:ListItem >
</ asp:DropDownList >
</ ItemTemplate >
< FooterTemplate >
< asp:DropDownList ID ="NewClassName" runat ="server" >
< asp:ListItem Text ="小学" Value ="小学" ></ asp:ListItem >
< asp:ListItem Text ="中学" Value ="中学" ></ asp:ListItem >
< asp:ListItem Text ="高中" Value ="高中" ></ asp:ListItem >
< asp:ListItem Text ="大学" Value ="大学" ></ asp:ListItem >
</ asp:DropDownList >
</ FooterTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText ="照片" >
< ItemTemplate >
< asp:PlaceHolder ID ="LabelPhoto" runat ="server" >
<% # GetUserPhoto( Eval ( " PhotoPath " )) %> </ asp:PlaceHolder >
< asp:FileUpload ID ="uPhoto" runat ="server" Visible ="false" />
</ ItemTemplate >
< FooterTemplate >
< asp:FileUpload ID ="AddPhoto" runat ="server" />
</ FooterTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText ="操作" >
< ItemTemplate >
< asp:Panel ID ="PanelNormal" runat ="server" >
< asp:Button ID ="EditButton" runat ="server" Text ="修改" OnClick ="EditClick" CommandArgument ='<%#Eval("id") % > ' />
< asp:Button ID ="DeleteButton" runat ="server" Text ="删除" OnClick ="DeleteClick" CommandArgument ='<%#Eval("id") % > ' />
</ asp:Panel >
< asp:Panel ID ="PanelUpdate" runat ="server" Visible ="false" >
< asp:Button ID ="UpdateButton" runat ="server" Text ="更新" OnClick ="UpdateClick" CommandArgument ='<%#Eval("id") % > ' />
< asp:Button ID ="CancelButton" runat ="server" Text ="取消" OnClick ="CancelClick" />
</ asp:Panel >
</ ItemTemplate >
< FooterTemplate >
< asp:Button ID ="AddButton" runat ="server" Text ="添加新纪录" OnClick ="AddClick" />
</ FooterTemplate >
</ asp:TemplateField >
</ Columns >
< EmptyDataTemplate >
< table cellspacing ="0" rules ="all" border ="1" style ="border-collapse: collapse;" >
< tr >
< th > 姓名 </ th >
< th > 生日(yyyy-MM-dd格式) </ th >
< th > 性别 </ th >
< th > 年级 </ th >
< th > 照片 </ th >
< th > 操作 </ th >
</ tr >
< tr >
< td >
< asp:TextBox ID ="NewTitle" runat ="server" ></ asp:TextBox >
</ td >
< td >
< asp:TextBox ID ="NewBirthDay" runat ="server" ></ asp:TextBox >
</ td >
< td >
< asp:RadioButtonList ID ="NewGender" runat ="server" RepeatDirection ="Horizontal" >
< asp:ListItem Selected ="true" Text ="男" ></ asp:ListItem >
< asp:ListItem Text ="女" ></ asp:ListItem >
</ asp:RadioButtonList >
</ td >
< td >
< asp:DropDownList ID ="NewClassName" runat ="server" >
< asp:ListItem Text ="小学" Value ="小学" ></ asp:ListItem >
< asp:ListItem Text ="中学" Value ="中学" ></ asp:ListItem >
< asp:ListItem Text ="高中" Value ="高中" ></ asp:ListItem >
< asp:ListItem Text ="大学" Value ="大学" ></ asp:ListItem >
</ asp:DropDownList >
</ td >
< td >
< asp:FileUpload ID ="AddPhoto" runat ="server" />
</ td >
< td >
< asp:Button ID ="b" runat ="server" Text ="添加学生" OnClick ="AddClick" />
</ td >
</ tr >
</ table >
</ EmptyDataTemplate >
</ asp:GridView >
< div id ="Pager" runat ="server" style ="text-align:left;padding:10px 0;" ></ div >
< asp:Label ID ="ErrorMsg" runat ="server" ForeColor ="red" ></ asp:Label >
</ form >
</ body >
</ html >
<% @ Import Namespace = " System.Data " %>
<% @ Import Namespace = " System.Data.OleDb " %>
< script runat ="server" >
private int EditId = 0 ;
private String ConnectionString = @ " Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|/ASPNET20Book.mdb; " ;
// / <summary>
// / 显示图片,在图片不存在时显示一个 none.gif
// / </summary>
// / <param name="pathPhoto"></param>
// / <returns></returns>
private string GetUserPhoto(object pathPhoto)
{
if (pathPhoto == DBNull.Value)
{
return " <img src='Images/none.gif'> " ;
}
else
{
return " <img src=' " + pathPhoto.ToString() + " '> " ;
}
}
// / <summary>
// / 数据绑定的处理。在需要编辑时,显示出编辑框
// / </summary>
// / <param name="sender"></param>
// / <param name="e"></param>
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (EditId > 0 )
{
// 如果绑定数据源是DatarReader,则使用下面的方法:
// System.Data.Common.DbDataRecord rowItem = (System.Data.Common.DbDataRecord)e.Row.DataItem;
// 如果绑定是 DataView,则使用此方法
System.Data.DataRowView rowItem = (System.Data.DataRowView)e.Row.DataItem;
if (rowItem[ " id " ].ToString().Equals(EditId.ToString()))
{
// 隐藏显示的文字
PlaceHolder LabelTitle = e.Row.FindControl( " LabelTitle " ) as PlaceHolder;
LabelTitle.Visible = false ;
PlaceHolder LabelBirthday = e.Row.FindControl( " LabelBirthday " ) as PlaceHolder;
LabelBirthday.Visible = false ;
PlaceHolder LabelGender = e.Row.FindControl( " LabelGender " ) as PlaceHolder;
LabelGender.Visible = false ;
PlaceHolder LabelClassName = e.Row.FindControl( " LabelClassName " ) as PlaceHolder;
LabelClassName.Visible = false ;
PlaceHolder LabelPhoto = e.Row.FindControl( " LabelPhoto " ) as PlaceHolder;
LabelPhoto.Visible = false ;
// 打开编辑框
TextBox uTitle = e.Row.FindControl( " uTitle " ) as TextBox;
uTitle.Visible = true ;
TextBox uBirthDay = e.Row.FindControl( " uBirthDay " ) as TextBox;
uBirthDay.Visible = true ;
RadioButtonList uGender = e.Row.FindControl( " uGender " ) as RadioButtonList;
uGender.Visible = true ;
DropDownList uClassName = e.Row.FindControl( " uClassName " ) as DropDownList;
uClassName.Visible = true ;
FileUpload uPhoto = e.Row.FindControl( " uPhoto " ) as FileUpload;
uPhoto.Visible = true ;
// 赋原来的值
if (rowItem[ " Gender " ] != DBNull.Value)
{
uGender.SelectedIndex = (Convert.ToBoolean(rowItem[ " Gender " ]) ? 0 : 1 );
}
if (rowItem[ " ClassName " ] != DBNull.Value)
{
uClassName.Items.FindByText(rowItem[ " ClassName " ].ToString()).Selected = true ;
}
// 显示编辑更新按钮
Panel PanelNormal = e.Row.FindControl( " PanelNormal " ) as Panel;
PanelNormal.Visible = false ;
Panel PanelUpdate = e.Row.FindControl( " PanelUpdate " ) as Panel;
PanelUpdate.Visible = true ;
}
}
}
}
// / <summary>
// / 打开编辑框,将编辑标识传递到 EditId
// / </summary>
// / <param name="sender"></param>
// / <param name="e"></param>
protected void EditClick(object sender, EventArgs e)
{
Button b = sender as Button;
EditId = Convert.ToInt32(b.CommandArgument);
GridViewRow dvr = b.NamingContainer as GridViewRow;
EditId = ( int )GridView1.DataKeys[dvr.DataItemIndex].Value;
DataBind();
// Response.Write(GridView1.DataKeys[dvr.DataItemIndex].Value);
}
// / <summary>
// / 将编辑的数据保存
// / </summary>
// / <param name="sender"></param>
// / <param name="e"></param>
protected void UpdateClick(object sender, EventArgs e)
{
Button b = sender as Button;
GridViewRow dvr = b.NamingContainer as GridViewRow;
TextBox uTitle = dvr.FindControl( " uTitle " ) as TextBox;
string StudentTitle = uTitle.Text;
string StudentBirthDay = ((TextBox)dvr.FindControl( " uBirthDay " )).Text;
bool StudentGender = ((RadioButtonList)dvr.FindControl( " uGender " )).SelectedValue == " 男 " ? true : false ;
string StudentClassName = ((DropDownList)dvr.FindControl( " uClassName " )).SelectedValue;
string StudentID = GridView1.DataKeys[dvr.RowIndex].Value.ToString();
string sql = "" ;
String PhotoPath = "" ;
bool HasFileUploaded = false ;
FileUpload oUpload = (FileUpload)dvr.FindControl( " uPhoto " );
if (oUpload.HasFile)
{
PhotoPath = Guid.NewGuid().ToString( " D " ) + System.IO.Path.GetExtension(oUpload.FileName);
oUpload.SaveAs(Server.MapPath( " ~ " ) + " // " + PhotoPath);
HasFileUploaded = true ;
}
if (HasFileUploaded)
{
sql = " Update Student Set Title=@Title,BirthDay = @BirthDay, " ;
sql += " Gender=@Gender,PhotoPath=@PhotoPath,ClassName=@ClassName Where id=@id " ;
}
else
{
sql = " Update Student Set Title=@Title,BirthDay = @BirthDay, " ;
sql += " Gender=@Gender,ClassName=@ClassName Where id=@id " ;
}
OleDbConnection cn = new OleDbConnection(ConnectionString);
cn.Open();
OleDbCommand cmd = new OleDbCommand(sql, cn);
cmd.Parameters.AddWithValue( " @Title " , StudentTitle);
cmd.Parameters.AddWithValue( " @BirthDay " , StudentBirthDay);
cmd.Parameters.AddWithValue( " @Gender " , StudentGender);
if (HasFileUploaded)
{
cmd.Parameters.AddWithValue( " @PhotoPath " , PhotoPath);
}
cmd.Parameters.AddWithValue( " @ClassName " , StudentClassName);
cmd.Parameters.AddWithValue( " @id " , StudentID);
cmd.ExecuteNonQuery();
cn.Close();
Response.Redirect(Request.Url.ToString());
}
// / <summary>
// / 添加新记录
// / </summary>
// / <param name="sender"></param>
// / <param name="e"></param>
protected void AddClick(object sender, EventArgs e)
{
InsertNewRecord(sender, e);
}
// / <summary>
// / 取消编辑
// / </summary>
// / <param name="sender"></param>
// / <param name="e"></param>
protected void CancelClick(object sender, EventArgs e)
{
Response.Redirect(Request.UrlReferrer.ToString());
}
// / <summary>
// / 删除记录
// / </summary>
// / <param name="sender"></param>
// / <param name="e"></param>
protected void DeleteClick(object sender, EventArgs e)
{
Button b = sender as Button;
int id = Convert.ToInt32(b.CommandArgument);
OleDbConnection cn = new OleDbConnection(ConnectionString);
cn.Open();
OleDbCommand cmd = new OleDbCommand( " Delete From [Student] Where [id]=@id " , cn);
cmd.Parameters.AddWithValue( " @id " , id);
cmd.ExecuteNonQuery();
cn.Close();
Response.Redirect(Request.Url.ToString());
}
// / <summary>
// / 插入新记录的公共函数
// / </summary>
// / <param name="sender"></param>
// / <param name="e"></param>
protected void InsertNewRecord(object sender, EventArgs e)
{
string StudentTitle = ((TextBox)(sender as Button).NamingContainer.FindControl( " NewTitle " )).Text;
if (StudentTitle.Trim() == "" )
{
ErrorMsg.Text = " 请输入姓名 " ;
return ;
}
string StudentBirthDay = ((TextBox)(sender as Button).NamingContainer.FindControl( " NewBirthDay " )).Text;
bool StudentGender = ((RadioButtonList)
(sender as Button).NamingContainer.FindControl( " NewGender " )).SelectedValue == " 男 " ? true : false ;
string StudentClassName = ((DropDownList)
(sender as Button).NamingContainer.FindControl( " NewClassName " )).SelectedValue;
FileUpload oUpload = (FileUpload)(sender as Button).NamingContainer.FindControl( " AddPhoto " );
String FileName = "" ;
FileName = Guid.NewGuid().ToString( " D " ) + System.IO.Path.GetExtension(oUpload.FileName);
oUpload.SaveAs(Server.MapPath( " ~ " ) + " // " + FileName);
string sql = " Insert Into Student (Title,BirthDay,Gender,PhotoPath,ClassName) " ;
sql += " Values(@Title,@BirthDay,@Gender,@PhotoPath,@ClassName) " ;
OleDbConnection cn = new OleDbConnection(ConnectionString);
cn.Open();
OleDbCommand cmd = new OleDbCommand(sql, cn);
cmd.Parameters.AddWithValue( " @Title " , StudentTitle);
cmd.Parameters.AddWithValue( " @BirthDay " , StudentBirthDay);
cmd.Parameters.AddWithValue( " @Gender " , StudentGender);
cmd.Parameters.AddWithValue( " @PhotoPath " , FileName);
cmd.Parameters.AddWithValue( " @ClassName " , StudentClassName);
cmd.ExecuteNonQuery();
cn.Close();
Response.Redirect(Request.FilePath.ToString());
}
// / <summary>
// / 生成 Google 样式的分页
// / </summary>
// / <param name="TotalCountRecord"></param>
// / <param name="CurrentPage"></param>
// / <param name="PageItem"></param>
// 每页显示的记录数
private int PageItem = 10 ;
private void BuildPagers( int TotalCountRecord, int CurrentPage)
{
int Step = 6 ;
int LeftNum = 0 ;
int RightNum = 0 ;
String PageUrl = " ? " ;
int PageCount = ( int )Math.Ceiling(( double )(TotalCountRecord) / PageItem);
if (CurrentPage - Step < 1 )
{
LeftNum = 1 ;
}
else
{
LeftNum = CurrentPage - Step;
}
if (CurrentPage + Step > PageCount)
{
RightNum = PageCount;
}
else
{
RightNum = CurrentPage + Step;
}
string OutPut = "" ;
for ( int i = LeftNum; i <= RightNum; i ++ )
{
if (i == CurrentPage)
{
OutPut += " <span style='color:red'> " + i.ToString() + " </span> " ;
}
else
{
OutPut += " <a href=/" " + PageUrl + " Page= " + i.ToString() + " /"> " + i.ToString() + " </a> " ;
}
}
if (CurrentPage > 1 )
{
OutPut = " <a href=' " + PageUrl + " Page=1'>首页</a> <a href=/" " + PageUrl + " Page= " + (CurrentPage - 1 ) + " /">上一页</a> " + OutPut;
}
if (CurrentPage < PageCount)
{
OutPut += " <a href=/" " + PageUrl + " Page= " + (CurrentPage + 1 ) + " /">下一页</a> <a href=' " + PageUrl + " Page= " + PageCount + " '>末页</a> " ;
}
Pager.InnerHtml = OutPut;
}
// / <summary>
// / 加载页面
// / </summary>
// / <param name="sender"></param>
// / <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
if ( ! Page.IsPostBack)
{
DataBind();
}
}
// / <summary>
// / 绑定 GridView
// / </summary>
protected void DataBind()
{
OleDbCommand cmd;
String sql;
OleDbConnection cn = new OleDbConnection(ConnectionString);
cn.Open();
// 由于是 Access 数据库,我们只进行简单的分页。对于性能要求较高的地方,请自行采取其他方法。
sql = " SELECT COUNT(*) FROM [Student] " ;
cmd = new OleDbCommand(sql, cn);
// 总的记录数
int TotalCount = Convert.ToInt32(cmd.ExecuteScalar());
// 当前页的序号
int PageIndex = 1 ;
String page = Request.QueryString[ " Page " ];
if (page == null ) page = " 1 " ;
Int32.TryParse(page, out PageIndex);
if (PageIndex < 1 ) PageIndex = 1 ;
int PageCount = ( int )Math.Ceiling(( double )(TotalCount) / PageItem);
if (PageIndex > PageCount) PageIndex = PageCount;
int startRecord = (PageIndex - 1 ) * PageItem;
sql = " SELECT * FROM [Student] ORDER BY [id] DESC " ;
OleDbDataAdapter da = new OleDbDataAdapter(sql, cn);
DataSet ds = new DataSet();
da.Fill(ds, startRecord, PageItem, " Student " );
GridView1.DataSource = ds.Tables[ 0 ].DefaultView;
GridView1.DataBind();
cn.Close();
BuildPagers(TotalCount, PageIndex);
}
</ script >
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
< html xmlns ="http://www.w3.org/1999/xhtml" >
< head id ="Head1" runat ="server" >
< title > GridView 插入、删除、修改的例子 </ title >
</ head >
< body >
< form id ="form1" runat ="server" >
< asp:GridView ID ="GridView1" runat ="server" AutoGenerateColumns ="False" DataKeyNames ="id"
OnRowDataBound ="GridView1_RowDataBound" ShowFooter ="true" >
< HeaderStyle BackColor ="#ccff99" Font-Bold ="true" />
< Columns >
< asp:TemplateField HeaderText ="姓名" >
< ItemTemplate >
< asp:PlaceHolder ID ="LabelTitle" runat ="server" >
<% # Eval ( " Title " ) %> </ asp:PlaceHolder >
< asp:TextBox ID ="uTitle" runat ="server" Text ='<%#Eval("Title") % > ' Visible="false"> </ asp:TextBox >
</ ItemTemplate >
< FooterTemplate >
< asp:TextBox ID ="NewTitle" runat ="server" ></ asp:TextBox >
</ FooterTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText ="生日(yyyy-MM-dd格式)" >
< ItemTemplate >
< asp:PlaceHolder ID ="LabelBirthday" runat ="server" >
<% # Eval ( " BirthDay " , " {0:yyyy-MM-dd} " ) %> </ asp:PlaceHolder >
< asp:TextBox ID ="uBirthDay" runat ="server" Text ='<%#Eval("BirthDay", "{0:yyyy-MM-dd}")% > '
Visible="false" />
</ ItemTemplate >
< FooterTemplate >
< asp:TextBox ID ="NewBirthDay" runat ="server" ></ asp:TextBox >
</ FooterTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText ="性别" >
< ItemTemplate >
< asp:PlaceHolder ID ="LabelGender" runat ="server" >
<% #( Eval ( " Gender " )).ToString() == " True " ? " 男 " : " 女 " %> </ asp:PlaceHolder >
< asp:RadioButtonList ID ="uGender" runat ="server" RepeatDirection ="Horizontal" Visible ="false" >
< asp:ListItem Text ="男" ></ asp:ListItem >
< asp:ListItem Text ="女" ></ asp:ListItem >
</ asp:RadioButtonList >
</ ItemTemplate >
< FooterTemplate >
< asp:RadioButtonList ID ="NewGender" runat ="server" RepeatDirection ="Horizontal" >
< asp:ListItem Selected ="true" Text ="男" ></ asp:ListItem >
< asp:ListItem Text ="女" ></ asp:ListItem >
</ asp:RadioButtonList >
</ FooterTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText ="年级" >
< ItemTemplate >
< asp:PlaceHolder ID ="LabelClassName" runat ="server" >
<% # Eval ( " ClassName " ) %> </ asp:PlaceHolder >
< asp:DropDownList ID ="uClassName" runat ="server" Visible ="false" >
< asp:ListItem Text ="小学" Value ="小学" ></ asp:ListItem >
< asp:ListItem Text ="中学" Value ="中学" ></ asp:ListItem >
< asp:ListItem Text ="高中" Value ="高中" ></ asp:ListItem >
< asp:ListItem Text ="大学" Value ="大学" ></ asp:ListItem >
</ asp:DropDownList >
</ ItemTemplate >
< FooterTemplate >
< asp:DropDownList ID ="NewClassName" runat ="server" >
< asp:ListItem Text ="小学" Value ="小学" ></ asp:ListItem >
< asp:ListItem Text ="中学" Value ="中学" ></ asp:ListItem >
< asp:ListItem Text ="高中" Value ="高中" ></ asp:ListItem >
< asp:ListItem Text ="大学" Value ="大学" ></ asp:ListItem >
</ asp:DropDownList >
</ FooterTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText ="照片" >
< ItemTemplate >
< asp:PlaceHolder ID ="LabelPhoto" runat ="server" >
<% # GetUserPhoto( Eval ( " PhotoPath " )) %> </ asp:PlaceHolder >
< asp:FileUpload ID ="uPhoto" runat ="server" Visible ="false" />
</ ItemTemplate >
< FooterTemplate >
< asp:FileUpload ID ="AddPhoto" runat ="server" />
</ FooterTemplate >
</ asp:TemplateField >
< asp:TemplateField HeaderText ="操作" >
< ItemTemplate >
< asp:Panel ID ="PanelNormal" runat ="server" >
< asp:Button ID ="EditButton" runat ="server" Text ="修改" OnClick ="EditClick" CommandArgument ='<%#Eval("id") % > ' />
< asp:Button ID ="DeleteButton" runat ="server" Text ="删除" OnClick ="DeleteClick" CommandArgument ='<%#Eval("id") % > ' />
</ asp:Panel >
< asp:Panel ID ="PanelUpdate" runat ="server" Visible ="false" >
< asp:Button ID ="UpdateButton" runat ="server" Text ="更新" OnClick ="UpdateClick" CommandArgument ='<%#Eval("id") % > ' />
< asp:Button ID ="CancelButton" runat ="server" Text ="取消" OnClick ="CancelClick" />
</ asp:Panel >
</ ItemTemplate >
< FooterTemplate >
< asp:Button ID ="AddButton" runat ="server" Text ="添加新纪录" OnClick ="AddClick" />
</ FooterTemplate >
</ asp:TemplateField >
</ Columns >
< EmptyDataTemplate >
< table cellspacing ="0" rules ="all" border ="1" style ="border-collapse: collapse;" >
< tr >
< th > 姓名 </ th >
< th > 生日(yyyy-MM-dd格式) </ th >
< th > 性别 </ th >
< th > 年级 </ th >
< th > 照片 </ th >
< th > 操作 </ th >
</ tr >
< tr >
< td >
< asp:TextBox ID ="NewTitle" runat ="server" ></ asp:TextBox >
</ td >
< td >
< asp:TextBox ID ="NewBirthDay" runat ="server" ></ asp:TextBox >
</ td >
< td >
< asp:RadioButtonList ID ="NewGender" runat ="server" RepeatDirection ="Horizontal" >
< asp:ListItem Selected ="true" Text ="男" ></ asp:ListItem >
< asp:ListItem Text ="女" ></ asp:ListItem >
</ asp:RadioButtonList >
</ td >
< td >
< asp:DropDownList ID ="NewClassName" runat ="server" >
< asp:ListItem Text ="小学" Value ="小学" ></ asp:ListItem >
< asp:ListItem Text ="中学" Value ="中学" ></ asp:ListItem >
< asp:ListItem Text ="高中" Value ="高中" ></ asp:ListItem >
< asp:ListItem Text ="大学" Value ="大学" ></ asp:ListItem >
</ asp:DropDownList >
</ td >
< td >
< asp:FileUpload ID ="AddPhoto" runat ="server" />
</ td >
< td >
< asp:Button ID ="b" runat ="server" Text ="添加学生" OnClick ="AddClick" />
</ td >
</ tr >
</ table >
</ EmptyDataTemplate >
</ asp:GridView >
< div id ="Pager" runat ="server" style ="text-align:left;padding:10px 0;" ></ div >
< asp:Label ID ="ErrorMsg" runat ="server" ForeColor ="red" ></ asp:Label >
</ form >
</ body >
</ html >