如何使用vb.net访问DataList中的复选框

时间:2012-02-08 08:08:20

标签: asp.net vb.net datalist

我有一个datalistdatalist中的每个项目都有一个checkbox并且已停用button,我希望在checkbox被选中时,按钮将被启用。

如何访问datalist中的项目的复选框事件?

3 个答案:

答案 0 :(得分:1)

请按照以下步骤操作:

  1. 在设计时定义CheckBox的OnCheckedChanged方法
  2. 在OnCheckedChanged方法中找到DataListItem
  3. 在DataList中找到所需的控件;您可以使用当前DataListItem的索引
  4. 在当前行中找到它
  5. 更改找到的控件的启用属性
  6. 它看起来像这样:

        protected void CheckedChangeMethod(object sender, EventArgs e)
        {
            CheckBox checkBox = ((CheckBox)sender);
            DataListItem item = ((DataListItem)CheckBox.NamingContainer);
            if (checkBox.Checked)
            {
                ((Button)dataList.Items[item.ItemIndex].FindControl("btnControl")).Enabled = true;
            }
         }
    

    我希望这会有所帮助。

答案 1 :(得分:0)

首先你需要声明一个Private WithEvents chk As CheckBox(WithEvents会让你对datalist中的复选框有一个参考)

然后在DataList1_ItemCreated内,您应该执行以下操作:

Private Sub DataList1_ItemCreated(sender As Object, e As System.Web.UI.WebControls.DataListItemEventArgs) Handles DataList1.ItemCreated
    If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then
        chk = CType(e.Item.FindControl("CheckBox1"), CheckBox)
        AddHandler chk.CheckedChanged, AddressOf chk_CheckedChanged
    End If
End Sub

使chk成为datalist中复选框的引用

最后你必须处理复选框检查/取消选中事件( P.S。它是重要的,让你的数据列表中的复选框将属性AutoPostBack设置为true ):

    Private Sub chk_CheckedChanged(sender As Object, e As System.EventArgs) Handles chk.CheckedChanged
    Dim cb As CheckBox = CType(sender, CheckBox)
    Dim item As DataListItem = DirectCast(cb.NamingContainer, DataListItem)
    If cb.Checked Then
        DirectCast(DataList1.Items(item.ItemIndex).FindControl("Button1"), Button).Enabled = True
    Else
        DirectCast(DataList1.Items(item.ItemIndex).FindControl("Button1"), Button).Enabled = False
    End If
End Sub

答案 2 :(得分:0)

Private Sub chk_CheckedChanged(sender As Object, e As System.EventArgs) Handles chk.CheckedChanged

 Dim cb As CheckBox = CType(sender, CheckBox)

Dim item As DataListItem = DirectCast(cb.NamingContainer, DataListItem)

If cb.Checked Then

   DirectCast(DataList1.Items(item.ItemIndex).FindControl("Button1"), Button).Enabled = True

 Else

 DirectCast(DataList1.Items(item.ItemIndex).FindControl("Button1"), Button).Enabled = False

  End If
End Sub