使用复选框更改多个 DataGrid 行中的列






2.90/5 (21投票s)
2003年11月20日
1分钟阅读

86976
本文演示了如何将下拉列表的值应用于 DataGrid 中的多行。
引言
本文将演示如何使用复选框更改 DataGrid
列中多行的数据。这是一个常见的问题,并且很容易实现,所以我们直接进入正题。
在开始之前,我先提出一个假设,请确保您的代码满足以下基本要求,否则您需要进行一些额外的操作。
我假设绑定到网格的数据也可以通过您代码中的某个对象进行编辑(换句话说,DataGrid
列是某个对象的属性),并且您有该对象的更新例程。例如,在我们的例子中,我们使用的对象是 PurchaseOrder
,列(属性)是 ApprovalStatus
。
首先,让我们从一个简单的绑定例程开始。getApproverPOs
函数只是返回一个 DataTable
对象,您可以将其替换为您自己的 DataTable
。
Sub BindGrid()
dgPO.DataSource = PurchaseOrder.getApproverPOs
dgPO.DataBind()
End Sub
在我们的例子中,我们有一个名为 lstStatus
的下拉列表和一个名为 btnApply
的按钮。
接下来的 Iterate
例程将循环遍历每一行,并查看 DataGrid
的第一个模板列中的复选框(名为 chk
)是否被选中,如果是,它将加载 PurchaseOrder
,设置一个新的 ApprovalStatus
,并更新更改。
Public Sub Iterate()
Dim DGItem As DataGridItem
Dim chkSel As System.Web.UI.WebControls.CheckBox
Dim po As PurchaseOrder
For Each DGItem In dgPO.Items
chkSel = DGItem.FindControl("chk")
If chkSel.Checked Then
po = PurchaseOrder.getPO(DGItem.Cells(1).Text) 'pass the po number to get
po.ApprovalStatus = lstStatus.SelectedItem.Value
'send an email to original PO poster
PurchaseOrder.NotifyPoster(po)
po.Update()
End If
Next
End Sub
最后,我们需要为我们的按钮提供一个事件处理程序,该处理程序将指向上面的 Sub
。我们使用 Response.Redirect
在最后刷新复选框以及 ApprovalStatus
列。
Private Sub btnApply_Click(ByVal sender _
As System.Object, ByVal e As System.EventArgs) _
Handles btnApply.Click
Iterate()
Response.Redirect("thissamefile.aspx")
End Sub
就这样!希望这有帮助。