代码数据绑定 GridView & FindControl





0/5 (0投票)
本文将展示如何在代码后置中处理 GridView 控件,且不使用 DataSource 模型。如果
本文将展示如何在代码后置中处理 GridView 控件,且不使用 DataSource 模型。
如果你打算通过代码绑定 GridView,需要记住几点。当你这样做时,必须自己处理事件,这与在设计时配置 GridView 不同。
具体来说,你必须处理:RowEditing、RowDeleting、RowCancelingEdit 和 RowUpdating(GridView 的事件)。
1. 假设你在代码中绑定 GridView,你需要在 Page Load 事件处理程序中绑定 GridView。
If Not IsPostBack
GridView1.DataSource = EVALAdapter.GetData 'my dataset
GridView1.DataBind()
End If
2. 为了将你的 GridView 行置于“编辑”模式,你必须在 RowEditing 事件中执行以下操作。
GridView2.EditIndex = e.NewEditIndex
GridView2.DataSource = EvalGroups.GetData 'my dataset
GridView2.DataBind()
3. RowCancelingEdit 与 RowEditing 相同,只有一个小小的变化。
GridView1.EditIndex = -1
GridView1.DataSource = EVALAdapter.GetData
GridView1.DataBind()
4. 我的 RowUpdating 如下所示:
Dim cmd As New dsEvalTableAdapters.tblEvalTableAdapter
Dim FirstCellText as String = GridView1.Rows(e.RowIndex).Cells(0).Text
Dim chkCheck As CheckBox
chkCheck = GridView1.Rows(e.RowIndex).FindControl("CheckBox1")
Dim txtCtlID As TextBox
txtCtlID = GridView1.Rows(e.RowIndex).FindControl("TextBox2")
cmd.MGEvalUpdateEvalPeriod(FirstCellText , chkCheck.Checked, txtCtlID.Text) 'this runs the stored procedure I added to my dataset
GridView1.EditIndex = -1
GridView1.DataSource = EVALAdapter.GetData
GridView1.DataBind()
需要记住几点。FindControl 是必要的,因为在进入编辑模式时动态创建的 TextBox 控件没有直接引用。名称“TextBox1”是自动生成的(就像你第一次将 TextBox 控件添加到 Web 表单并为其分配默认 ID 值一样)。如果你在进入编辑模式后查看 aspx 页面的源代码,可以看到这一点。
重要:你尝试使用 FindControl 查找的控件字段,在本例中,必须是模板字段,而不能仅仅是 BoundField(如果它们是 BoundField,则需要通过 GridViewRow.Cells 集合访问它们,就像我们对“FirstCellText”值所做的那样)。
在本文中,我们展示了如何使用代码后置手动绑定 GridView 控件,且不使用 DataSource 模型。
请注意,使用 DataSource 模型更容易,因为你只需要使用 Visual Studio 设计器配置 GridView 数据源。此外,使用 DataSource 模型可以自动启用分页、编辑、删除、更新,而使用代码后置方法(如本文所示)则需要大量工作。
有时你别无选择,只能使用代码后置模型,例如,如果你想将 GridView 绑定到数组元素列表或在页面代码后置中创建的 DataTable。
最后,尽可能使用 DataSource 模型,因为它简单且最大限度地减少了代码量,从而最大限度地减少错误和工作量。
链接: