在ASP.NET中,GridView控件是用于显示和操作数据的强大工具。通常情况下,可以通过Visual Studio设计器来配置GridView的数据源,这种方式简单直观。然而,有时候需要通过代码来绑定数据,尤其是在数据源是在页面的代码后台动态生成的情况下。本文将介绍如何在不使用数据源模型的情况下,通过代码来绑定GridView控件,并处理相关的事件。
当通过代码来绑定GridView时,需要自己处理事件,这与在设计时配置GridView不同。需要处理的事件包括:行编辑(RowEditing)、行删除(RowDeleting)、取消编辑(RowCancelingEdit)和更新行(RowUpdating)。
假设正在通过代码绑定GridView,需要在页面加载事件处理程序中绑定GridView:
If Not IsPostBack Then
GridView1.DataSource = EVALAdapter.GetData()
GridView1.DataBind()
End If
这段代码在页面首次加载时,设置GridView的数据源并绑定数据。
要将GridView的行设置为编辑模式,需要在RowEditing事件中执行以下操作:
GridView2.EditIndex = e.NewEditIndex
GridView2.DataSource = EvalGroups.GetData()
GridView2.DataBind()
这段代码将GridView的编辑索引设置为新的编辑索引,并重新绑定数据。
取消编辑(RowCancelingEdit)与编辑(RowEditing)相似,但有一个小变化:
GridView1.EditIndex = -1
GridView1.DataSource = EVALAdapter.GetData()
GridView1.DataBind()
这段代码将编辑索引设置为-1,表示没有行处于编辑状态,并重新绑定数据。
更新行(RowUpdating)的代码如下:
Dim cmd As New dsEvalTableAdapters.tblEvalTableAdapter
Dim FirstCellText As String = GridView1.Rows(e.RowIndex).Cells(0).Text
Dim chkCheck As CheckBox = GridView1.Rows(e.RowIndex).FindControl("CheckBox1")
Dim txtCtlID As TextBox = GridView1.Rows(e.RowIndex).FindControl("TextBox2")
cmd.MGEvalUpdateEvalPeriod(FirstCellText, chkCheck.Checked, txtCtlID.Text)
GridView1.EditIndex = -1
GridView1.DataSource = EVALAdapter.GetData()
GridView1.DataBind()
这段代码首先创建一个命令对象,并获取当前行的第一列文本、复选框的状态和文本框的文本。然后,它调用存储过程更新数据,并重置编辑索引,重新绑定数据。
使用FindControl是因为在编辑模式下动态创建的TextBox控件没有直接引用。'TextBox1'的名称是自动生成的,类似于在Web表单中首次添加TextBox控件时自动赋予的默认ID值。可以通过查看编辑模式下的aspx页面源代码来查看这一点。
重要的是,尝试使用FindControl找到的控件字段必须是模板字段,而不是BoundField。如果是BoundField,则需要通过GridViewRow.Cells集合来访问,就像获取"FirstCellText"值那样。