GridView的19种操作
更新时间:2024-05-02 15:02:01 阅读量: 综合文库 文档下载
GridView 19种操作
快速预览:
1.GridView无代码分页排序 2.GridView选中,编辑,取消,删除
3.GridView正反双向排序 4.GridView和下拉菜单DropDownList结合 5.GridView和CheckBox结合 6.标移到GridView某一行时改变该行的背景色方法一 7.鼠标移到GridView某一行时改变该行的背景色方法二 8.GridView实现删除时弹出确认对话框 9.GridView实现自动编号
10.GridView实现自定义时间货币等字符串格式
11.GridView实现用“...”代替超长字符串 12.GridView一般换行与强制换行 13.GridView显示隐藏某一列 14.GridView弹出新页面/弹出新窗口 15.GridView固定表头(不用javascript只用CSS,2行代码,很好用) 16.GridView合并表头多重表头无错完美版(以合并3列3行举例) 17GridView突出显示某一单元格(例如金额低于多少,分数不及格等) 18.GridView加入自动求和求平均值小计
19.GridView数据导入Excel/Excel数据读入GridView
1.GridView无代码分页排序:
1.AllowSorting设为True,aspx代码中是AllowSorting=\;
2.默认1页10条,如果要修改每页条数,修改PageSize即可,在aspx代码中是PageSize=\。 3.默认的是单向排序的,右击GridView弹出“属性”,选择AllowSorting为True即可。 2.GridView选中,编辑,取消,删除: 效果图:
后台代码:
你可以使用sqlhelper,本文没用。代码如下:
public partial class _Default : System.Web.UI.Page {
SqlConnection sqlcon; SqlCommand sqlcom;
string strCon = \数据库名;Uid=帐号;Pwd=密码\ protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
bind(); } }
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) {
GridView1.EditIndex = e.NewEditIndex; bind(); }
//删除 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) {
string sqlstr = \表 where id='\ GridView1.DataKeys[e.RowIndex].Value.ToString() + \
sqlcon = new SqlConnection(strCon); sqlcom = new SqlCommand(sqlstr,sqlcon); sqlcon.Open();
sqlcom.ExecuteNonQuery(); sqlcon.Close(); bind(); }
//更新 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) {
sqlcon = new SqlConnection(strCon); string sqlstr = \表 set 字段1='\+
((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + \字段2='\+
(TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text.ToString().Trim() + \字段3='\
((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() + \where id='\
+ GridView1.DataKeys[e.RowIndex].Value.ToString() + \ sqlcom=new SqlCommand(sqlstr,sqlcon); sqlcon.Open();
sqlcom.ExecuteNonQuery(); sqlcon.Close();
GridView1.EditIndex = -1; bind(); } //取消
protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
GridView1.EditIndex = -1; bind(); }
//绑定 public void bind() {
string sqlstr = \表\ sqlcon = new SqlConnection(strCon);
SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon); DataSet myds = new DataSet(); sqlcon.Open(); myda.Fill(myds, \表\
GridView1.DataSource = myds;
GridView1.DataKeyNames = new string[] { \主键 GridView1.DataBind(); sqlcon.Close(); } }
前台主要代码: ... ...
OnRowEditing=\OnRowUpdating=\OnRowCancelingEdit=\
3.GridView正反双向排序: 效果图:点姓名各2次的排序,点其他也一样可以。 后台代码: public partial class Default3 : System.Web.UI.Page { SqlConnection sqlcon; string strCon = \北风贸易;Uid=sa;Pwd=\ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ViewState[\身份证号码\ ViewState[\ bind(); } } protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) { string sPage = e.SortExpression; if (ViewState[\ { if (ViewState[\ ViewState[\ else ViewState[\ } else { ViewState[\ } bind(); } public void bind() { string sqlstr = \飞狐工作室\ sqlcon = new SqlConnection(strCon); SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon); DataSet myds = new DataSet(); sqlcon.Open(); myda.Fill(myds, \飞狐工作室\ DataView view = myds.Tables[\飞狐工作室\ string sort = (string)ViewState[\ view.Sort = sort; GridView1.DataSource = view; GridView1.DataBind(); sqlcon.Close(); } } 前台主要代码: CellPadding=\BackColor=\ 4.GridView和下拉菜单DropDownList结合:效果图: 后台代码: public partial class Default4 : System.Web.UI.Page { SqlConnection sqlcon; string strCon = \北风贸易;Uid=sa;Pwd=sa\ protected void Page_Load(object sender, EventArgs e) { DropDownList ddl; if (!IsPostBack) { string sqlstr = \飞狐工作室\ sqlcon = new SqlConnection(strCon); SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon); DataSet myds = new DataSet(); sqlcon.Open(); myda.Fill(myds, \飞狐工作室\ GridView1.DataSource = myds; GridView1.DataBind(); for (int i = 0; i <= GridView1.Rows.Count - 1; i++) { DataRowView mydrv = myds.Tables[\飞狐工作室\ if (Convert.ToString(mydrv[\员工性别\ { ddl = (DropDownList)GridView1.Rows[i].FindControl(\ ddl.SelectedIndex = 0; } if (Convert.ToString(mydrv[\员工性别\ { ddl = (DropDownList)GridView1.Rows[i].FindControl(\ ddl.SelectedIndex = 1; } } sqlcon.Close(); } } public SqlDataReader ddlbind() { string sqlstr = \员工性别 from 飞狐工作室\ sqlcon = new SqlConnection(strCon); SqlCommand sqlcom = new SqlCommand(sqlstr, sqlcon); sqlcon.Open(); return sqlcom.ExecuteReader(); } 前台主要代码: 区别的两行 1 ddlbind()%>' DataValueField=\员工性别\员工性别\ 5.GridView和CheckBox结合: 效果图: 后台代码: public partial class Default5 : System.Web.UI.Page { SqlConnection sqlcon; string strCon = \北风贸易;Uid=sa;Pwd=sa\ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { bind(); } } protected void CheckBox2_CheckedChanged(object sender, EventArgs e) { for (int i = 0; i <= GridView1.Rows.Count - 1; i++) { CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl(\ if (CheckBox2.Checked == true) { cbox.Checked = true; } else { cbox.Checked = false; } } } protected void Button2_Click(object sender, EventArgs e) { sqlcon = new SqlConnection(strCon); SqlCommand sqlcom; for (int i = 0; i <= GridView1.Rows.Count - 1; i++) { CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl(\ if (cbox.Checked == true) { string sqlstr = \飞狐工作室 where 身份证号码='\GridView1.DataKeys[i].Value + \ sqlcom = new SqlCommand(sqlstr, sqlcon); sqlcon.Open(); sqlcom.ExecuteNonQuery(); sqlcon.Close(); } } bind(); } protected void Button1_Click(object sender, EventArgs e) { CheckBox2.Checked = false; for (int i = 0; i <= GridView1.Rows.Count - 1; i++) { CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl(\ cbox.Checked = false; } } public void bind() { string sqlstr = \飞狐工作室\ sqlcon = new SqlConnection(strCon); SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon); DataSet myds = new DataSet(); sqlcon.Open(); myda.Fill(myds, \ GridView1.DataSource = myds; GridView1.DataKeyNames = new string[] { \身份证号码\ GridView1.DataBind(); sqlcon.Close(); } } 前台主要代码:区别的列 区别列: 6.鼠标移到GridView某一行时改变该行的背景色方法一: 做法: 双击GridView的OnRowDataBound事件; 在后台的GridView1_RowDataBound()方法添加代码,最后代码如下所示: protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { int i; //执行循环,保证每条数据都可以更新 for (i = 0; i < GridView1.Rows.Count; i++) { //首先判断是否是数据行 if (e.Row.RowType == DataControlRowType.DataRow) { //当鼠标停留时更改背景色 e.Row.Attributes.Add(\ \ //当鼠标移开时还原背景色 e.Row.Attributes.Add(\ } } } 7.鼠标移到GridView某一行时改变该行的背景色方法二:效果图: 做法:和上面的一样就是代码不同 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { //int i; ////执行循环,保证每条数据都可以更新 //for (i = 0; i < GridView1.Rows.Count; i++) //{ // //首先判断是否是数据行 // if (e.Row.RowType == DataControlRowType.DataRow) // { // //当鼠标停留时更改背景色 // e.Row.Attributes.Add(\ \ // //当鼠标移开时还原背景色 // e.Row.Attributes.Add(\ // } //} //如果是绑定数据行 if (e.Row.RowType == DataControlRowType.DataRow) { //鼠标经过时,行背景色变 e.Row.Attributes.Add(\ //鼠标移出时,行背景色变 e.Row.Attributes.Add(\ } } 8.GridView实现删除时弹出确认对话框: 效果图: 实现方法: 双击GridView的OnRowDataBound事件; 在后台的GridView1_RowDataBound()方法添加代码,最后代码如下所示: protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { //如果是绑定数据行 if (e.Row.RowType == DataControlRowType.DataRow) { { return sString; } string sNewStr = sString.Substring(0, nLeng); sNewStr = sNewStr + \ return sNewStr; }后台全部代码: public partial class _Default : System.Web.UI.Page { SqlConnection sqlcon; SqlCommand sqlcom; string strCon = \北风贸易;Uid=sa;Pwd=sa\ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ViewState[\身份证号码\ ViewState[\ bind(); } } protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { GridView1.EditIndex = e.NewEditIndex; bind(); } protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { string sqlstr = \飞狐工作室 where 身份证号码='\GridView1.DataKeys[e.RowIndex].Value.ToString() + \ sqlcon = new SqlConnection(strCon); sqlcom = new SqlCommand(sqlstr,sqlcon); sqlcon.Open(); sqlcom.ExecuteNonQuery(); sqlcon.Close(); bind(); } protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { sqlcon = new SqlConnection(strCon); string sqlstr = \飞狐工作室 set 姓名='\ + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + \家庭住址='\ + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() + \where 身份证号码='\ + GridView1.DataKeys[e.RowIndex].Value.ToString() + \ sqlcom=new SqlCommand(sqlstr,sqlcon); sqlcon.Open(); sqlcom.ExecuteNonQuery(); sqlcon.Close(); GridView1.EditIndex = -1; bind(); } protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { GridView1.EditIndex = -1; bind(); } public void bind() { string sqlstr = \飞狐工作室\ sqlcon = new SqlConnection(strCon); SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon); DataSet myds = new DataSet(); sqlcon.Open(); myda.Fill(myds, \飞狐工作室\ GridView1.DataSource = myds; GridView1.DataKeyNames = new string[] { \身份证号码\ GridView1.DataBind(); for (int i = 0; i <= GridView1.Rows.Count - 1; i++) { DataRowView mydrv; string gIntro; if (GridView1.PageIndex == 0) { mydrv = myds.Tables[\飞狐工作室\ gIntro = Convert.ToString(mydrv[\家庭住址\ GridView1.Rows[i].Cells[3].Text = SubStr(gIntro, 2); } else { mydrv = myds.Tables[\飞狐工作室\GridView1.PageIndex)]; gIntro = Convert.ToString(mydrv[\家庭住址\ GridView1.Rows[i].Cells[3].Text = SubStr(gIntro, 2); } } sqlcon.Close(); } public string SubStr(string sString, int nLeng) { if (sString.Length <= nLeng) { return sString; } string sNewStr = sString.Substring(0, nLeng); sNewStr = sNewStr + \ return sNewStr; } protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { //如果是绑定数据行 if (e.Row.RowType == DataControlRowType.DataRow) { ////鼠标经过时,行背景色变 //e.Row.Attributes.Add(\ ////鼠标移出时,行背景色变 //e.Row.Attributes.Add(\ ////当有编辑列时,避免出错,要加的RowState判断 //if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate) //{ // ((LinkButton)e.Row.Cells[6].Controls[0]).Attributes.Add(\\你确认要删除:\\\吗?')\ //} } if (e.Row.RowIndex != -1) { int id = e.Row.RowIndex + 1; e.Row.Cells[0].Text = id.ToString(); } } } 11.GridView一般换行与强制换行: 效果图: 首先设置 gridview里有一列绑定的数据很长,显示的时候在一行里面显示,页面拉得很宽。 原因是连续英文段为一个整体导致的,在RowDataBound中添加上了一句e.Row.Cells[2].Style.Add(\就可以。 如果要给所有的列增加此属性: protected void Page_Load(object sender, EventArgs e) { //正常换行 GridView1.Attributes.Add(\ //下面这行是自动换行 GridView1.Attributes.Add(\ if (!IsPostBack) { bind();//调用数据绑定即可 } } 总之:善用CSS的word-break:break-all;word-wrap:break-word属性即可,这个属性是通用的对于顽固的南换行问题都可以解决,不局限于GridView。 12.GridView显示隐藏某一列: 本方案为月儿独创,不同于网上其他方式,我觉得用一个CheckBox更人性化,这样可以隐藏不必要的列,让用户自己选择需要出现的列,在处理多列时这是一个很好的解决方案! 效果图:图1-开始 图2-点击显示的CheckBox后 解决方案: public void bind() { string sqlstr = \飞狐工作室\ sqlcon = new SqlConnection(strCon); SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon); DataSet myds = new DataSet(); sqlcon.Open(); myda.Fill(myds, \飞狐工作室\ GridView1.DataSource = myds; GridView1.DataKeyNames = new string[] { \身份证号码\ GridView1.DataBind(); sqlcon.Close(); GridView1.Columns[3].Visible = false;//一开始隐藏 CheckBox1.Checked = false;//如果不这样后面的代码会把他True } 双击CheckBox1,在CheckedChanged方法里写上代码,最后代码如下: protected void CheckBox1_CheckedChanged(object sender, EventArgs e) { GridView1.Columns[3].Visible=! GridView1.Columns[3].Visible; Response.Write(\的第4列现在的显示隐藏状态是:\ } 注意:CheckBox1的AutoPostBack要True! 后台全部代码如下: public partial class _Default : System.Web.UI.Page { SqlConnection sqlcon; SqlCommand sqlcom; string strCon = \北风贸易;Uid=sa;Pwd=sa\ protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ViewState[\身份证号码\ ViewState[\ bind(); } } protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { GridView1.EditIndex = e.NewEditIndex; bind(); } protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { string sqlstr = \飞狐工作室 where 身份证号码='\GridView1.DataKeys[e.RowIndex].Value.ToString() + \ sqlcon = new SqlConnection(strCon); sqlcom = new SqlCommand(sqlstr,sqlcon); sqlcon.Open(); sqlcom.ExecuteNonQuery(); sqlcon.Close(); bind(); } protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { sqlcon = new SqlConnection(strCon); string sqlstr = \飞狐工作室 set 姓名='\ + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text.ToString().Trim() + \家庭住址='\ + ((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text.ToString().Trim() + \where 身份证号码='\ + GridView1.DataKeys[e.RowIndex].Value.ToString() + \ sqlcom=new SqlCommand(sqlstr,sqlcon); sqlcon.Open(); sqlcom.ExecuteNonQuery(); sqlcon.Close(); GridView1.EditIndex = -1; bind(); } protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { GridView1.EditIndex = -1; bind(); } public void bind() { string sqlstr = \飞狐工作室\ sqlcon = new SqlConnection(strCon); SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon); DataSet myds = new DataSet(); sqlcon.Open(); myda.Fill(myds, \飞狐工作室\ GridView1.DataSource = myds; GridView1.DataKeyNames = new string[] { \身份证号码\ GridView1.DataBind(); sqlcon.Close(); GridView1.Columns[3].Visible = false; CheckBox1.Checked = false; } protected void CheckBox1_CheckedChanged(object sender, EventArgs e) { GridView1.Columns[3].Visible=! GridView1.Columns[3].Visible; Response.Write(\的第4列现在的显示隐藏状态是:\ } } 前台代码: AutoGenerateColumns=\OnRowEditing=\ OnRowUpdating=\ OnRowCancelingEdit=\ BorderColor=\> OnCheckedChanged=\显示隐藏家庭住址\/>