65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.90/5 (21投票s)

2003年11月20日

1分钟阅读

viewsIcon

86976

本文演示了如何将下拉列表的值应用于 DataGrid 中的多行。

Sample Image - chk.gif

引言

本文将演示如何使用复选框更改 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

就这样!希望这有帮助。

© . All rights reserved.