gridview 与droplist结合

    技术2022-05-20  100

    本文提供一个综合实现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 >

    最新回复(0)