ASP.NET GridView控件的高级应用

ASP.NET开发中,GridView控件是一个常用的数据展示组件。它提供了丰富的功能,但有时默认的功能并不能满足需求。本文将介绍如何在GridView控件中实现一些高级功能,包括数据绑定事件处理以及功能扩展

本文面向初学者,将使用大量的循环和基本语言结构,代码可以进一步优化。将通过一个简单的数据库表tmp_table来演示如何实现这些功能。

数据库结构

示例数据库包含一个名为tmp_table的表,它有以下四个字段:

  • ID:自增字段
  • uname:nvarchar(50)数据类型
  • totalMarks:float数据类型
  • selectedItem:bit数据类型

数据绑定

首先,将创建一个名为BindGridView()的函数,用于将从数据库中检索到的数据绑定到GridView控件。

protected void BindGridView() { DataTable dt = null; using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["tempdbConn"].ConnectionString)) { using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandType = CommandType.Text; cmd.CommandText = "select row_number() OVER (ORDER BY id) AS sno, id, uname, totalMarks, selectedItem from tmp_table"; using (SqlDataAdapter da = new SqlDataAdapter(cmd)) { dt = new DataTable(); da.Fill(dt); } } } GridView1.DataSource = dt; GridView1.DataBind(); }

GridViewRowDataBound事件中,将计算总分列的总和,并在相应列的页脚中显示。

if (e.Row.RowType == DataControlRowType.DataRow) { lgTots += Convert.ToDouble(DataBinder.Eval(e.Row.DataItem, "totalMarks")); } if (e.Row.RowType == DataControlRowType.Footer) { Label lgTotal = (Label)e.Row.FindControl("lblGrandTotal"); lgTotal.Text = lgTots.ToString(); }

接下来,将实现选择单个或全部记录的功能。将在GridView的表头中添加一个“全选”复选框,通过选中或取消选中它,可以分别选中或取消选中所有记录。

CheckBox chkA = GridView1.HeaderRow.FindControl("chekSelectALL") as CheckBox; foreach (GridViewRow gv in GridView1.Rows) { CheckBox chkS = gv.FindControl("chekSelect") as CheckBox; if (chkA.Checked) { chkS.Checked = true; } else { chkS.Checked = false; } }

实现额外功能

除了上述功能外,还将实现一些额外的功能,如插入新记录到数据库。为此,在GridView的页脚中添加了一个TemplateField,用于同时插入姓名和分数。

protected void lnkInsert_Click(object sender, EventArgs e) { string nme = string.Empty; TextBox tb = GridView1.FooterRow.FindControl("txtName") as TextBox; if (tb != null) { nme = tb.Text.Trim(); } string mrks = string.Empty; tb = null; tb = GridView1.FooterRow.FindControl("txtTotalMarks") as TextBox; if (tb != null) { mrks = tb.Text.Trim(); } bool chkSele = false; CheckBox chk = GridView1.FooterRow.FindControl("chekSelect") as CheckBox; if (chk != null) { if (chk.Checked == true) { chkSele = true; } else { chkSele = false; } } using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["tempdbConn"].ConnectionString)) { using (SqlCommand cmd = conn.CreateCommand()) { cmd.CommandType = CommandType.Text; cmd.CommandText = "Insert into tmp_table(uname, totalMarks, selectedItem) values(@nme, @mrks, @selectItem)"; cmd.Parameters.AddWithValue("@nme", nme); cmd.Parameters.AddWithValue("@mrks", mrks); cmd.Parameters.AddWithValue("@selectItem", chkSele); conn.Open(); cmd.ExecuteNonQuery(); } } BindGridView(); }

实现验证

为了确保数据的正确性,将使用正则表达式验证器来验证用户输入。

// 示例代码:使用正则表达式验证器验证用户名 RegexValidator rv = new RegexValidator(); rv.ValidationExpression = @"^[a-zA-Z0-9_.-]+$"; rv.ErrorMessage = "用户名只能包含字母、数字、下划线、点和破折号。";
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485