在往下之前我们先来讨论一个问题,从C/S到B/S的转型。做C/S的人应该知道,C/S的核心是架构,而且架构的基础是设计模式。设计模式相较编程语言要困难的多,想要学习一门编程语言只需要了解它的基本特性即可,但想要学好设计模式你的大脑就必须时刻的转变思维,而且在设计模式中主要是类和类之间的关系,类似于日常生活中的人与人之间的关系,它们之间的变化很复杂。当踏入到B/S似乎这种关系相较C/S淡化了很多,体会到了什么是学海无涯。另外B/S又相较C/S较简单,B/S需要我们学习的东西虽然多,如:DIV+CSS、HTML、JavaScript等等,但C/S的语言基础会在学习B/S时发挥相当大的作用,这种作用表现在对语言的理解上,另外还有写代码的能力。要知道编程的学习关键是代码量,代码量足够了我们就会有感脚,对熟悉的东西使用起来才得心应手。所以得出结论,从C/S到B/S转型很简单,只要多实践。
上面我们谈论了C/S到B/S的转型问题,之所以引发这样的思考是因为现在在做C/S的项目,而其他人在做B/S的项目,项目类型不一样,顾引发了上面的思考。好了回到文章的重点,来看看Web控件GridView的几个编程技巧,希望这些编程技巧能够帮助其他人。
GridView1.DataKeyNames=new string[]{"数据库主键列"};获取绑定的主键 :
string empID = this.GridView1.DataKeys[e.RowIndex].Value.ToString();
图2 页眉、页脚显示设置
图3 分页属性设置
图4 添加分页事件
protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e) { GridView1.PageIndex=e.NewSelectedIndex; //重新进行绑定 SqlConnection con = DBCon.Createcon(); SqlDataAdapter sda = new SqlDataAdapter(); sda.SelectCommand = new SqlCommand("select mou_serial,mou_balance,mou_date,mou_time from tblcheckmouth", con); DataSet ds = new DataSet(); sda.Fill(ds, "emp"); this.GridView1.DataSource = ds.Tables["emp"]; this.GridView1.DataBind(); }
当使用绑定事件对绑定的显示进行设置时,这时只有绑定的数据项(Item和交错项AlternateItem)才有高亮显示,其余的向页眉和页脚我们都不用高亮显示。
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType==DataControlRowType.DataRow ) { e.Row.Attributes.Add("onmouseover", "currentcolor=this.style.backgroundColor;this.style.backgroundColor='yellow';"); e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor=currentcolor;"); }; }
public void productsGridView_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { int unitsInStock = Convert.ToInt32(DataBinder.Eval(e.Row.DataItem, "UnitsInStock")); if (unitsInStock == 0) e.Row.BackColor = Color.Yellow; } }
为GridView控件设置排序事件处理方法,如下图:
图8 添加列排序事件
protected void GridView1_Sorting(object sender, GridViewSortEventArgs e) { if (ViewState["Order"] == null) { ViewState["Order"] = "ASC"; } else { if (ViewState["Order"] .ToString()== "ASC") { ViewState["Order"] = "DESC"; } else { ViewState["Order"] = "DESC"; } } SqlConnection con = DBCon.Createcon(); SqlDataAdapter sda = new SqlDataAdapter(); sda.SelectCommand = new SqlCommand("select mou_serial,mou_balance,mou_date,mou_time from tblcheckmouth", con); DataSet ds = new DataSet(); sda.Fill(ds, "emp"); ds.Tables["emp"].DefaultView.Sort = e.SortExpression + "" + ViewState["Order"].ToString(); this.GridView1.DataSource = ds.Tables["emp"]; this.GridView1.DataBind(); }
//弹出显示是否删除按钮 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType==DataControlRowType.DataRow ) { ((LinkButton)(e.Row.Cells[5].Controls[0])).Attributes.Add("onclick", "return confirm('确认删除?')"); }; } //删除操作代码 protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { string empID = this.GridView1.DataKeys[e.RowIndex].Value.ToString(); SqlConnection con = DBCon.Createcon(); SqlCommand cmd = new SqlCommand("delete from tblCheckMouth where mou_serial=" + Convert.ToInt32(empID),con); con.Open(); cmd.ExecuteNonQuery(); this.BindtoData(); }
//开始编辑 protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e) { this.GridView1.EditIndex = e.NewEditIndex; this.BindtoData(); } //取消编辑 protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) { this.GridView1.EditIndex = -1; BindtoData(); } //编辑完成后更新数据 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) { string empID = this.GridView1.DataKeys[e.RowIndex].Value.ToString(); string lastName = ((TextBox)(e.NewValues[1])).Text; Response.Write(empID + "&" + lastName); this.GridView1.EditIndex = -1; }
protected void Button1_Click(object sender, EventArgs e) { foreach (System.Web.UI.WebControls.GridViewRow dt in this.GridView1.Rows) { CheckBox chk = (CheckBox)dt.FindControl("chkSelect"); if (chk.Checked) { Response.Write(dt.Cells[0].Text); } } }