如何使布尔列可编辑(asp.net VB gridView由具有布尔列的DataTable填充)?

如何使布尔列可编辑(asp.net VB gridView由具有布尔列的DataTable填充)?,asp.net,vb.net,gridview,datatable,Asp.net,Vb.net,Gridview,Datatable,在GridView的数据源中填充数据表之后。出现复选框类型为的列,但该列已创建为只读列 我无法启用它或使其可编辑。。。甚至我也试过了。readonly=false 但仍然无法编辑 有谁能帮忙吗?你可以这样试试 这是故意的;默认情况下,GridView中的行不可编辑 有两种方法可以解决此问题: 添加编辑链接 在GridView标记中,添加AutoGenerateEditButton=“True”。当GridView在浏览器中呈现时,您现在应该会找到一个标记为“编辑”的超链接。如果单击它,GridV

在GridView的数据源中填充数据表之后。出现复选框类型为的列,但该列已创建为只读列 我无法启用它或使其可编辑。。。甚至我也试过了。readonly=false 但仍然无法编辑
有谁能帮忙吗?

你可以这样试试

这是故意的;默认情况下,GridView中的行不可编辑

有两种方法可以解决此问题:

  • 添加编辑链接
    在GridView标记中,添加
    AutoGenerateEditButton=“True”
    。当GridView在浏览器中呈现时,您现在应该会找到一个标记为“编辑”的超链接。如果单击它,GridView中的字段将变为可编辑,编辑链接将变为两个链接,一个用于保存对数据库的更改,另一个用于放弃更改。使用此方法,可以为您完成将GridView中的更改连接到数据库的所有管道,具体取决于您执行数据绑定的方式。此示例使用SqlDataSource控件。

    (来源:)
  • 添加包含复选框的TemplateField
    标记内,您可以添加为自己设置数据绑定的TemplateFields,例如


    (来源:)

    此复选框将被启用,但您需要自己完成工作,以将任何更改反映回数据库。只要您能够获得数据库密钥,这就很简单,因为您需要在某个时刻运行
    UPDATE
    语句,并且希望在正确的行上运行它!有两种方法可以做到这一点:

    在Gridview标记中,添加
    DataKeyNames=“MyDatabasePrimaryKey”
    。然后在
    CheckedChanged
    事件处理程序中,您需要找出您所在的行,并在
    DataKeys
    数组中查找该行

       Protected Sub DiscontinuedCheckBox_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)
        Dim DiscontinuedCheckBox As CheckBox
        Dim conn As SqlConnection
        Dim cmd As SqlCommand
        Dim productId As Integer
        Dim selectedRow As GridViewRow
        ' Cast the sender object to a CheckBox
        DiscontinuedCheckBox = CType(sender,CheckBox)
        ' We can find the row we clicked the checkbox in by walking up the control tree
        selectedRow = CType(DiscontinuedCheckBox.Parent.Parent,GridViewRow)
        ' GridViewRow has a DataItemIndex property which we can use to look up the DataKeys array
        productId = CType(ProductGridView.DataKeys(selectedRow.DataItemIndex).Value,Integer)
        conn = New SqlConnection(ProductDataSource.ConnectionString)
        cmd = New SqlCommand
        cmd.Connection = conn
        cmd.CommandType = CommandType.Text
        If DiscontinuedCheckBox.Checked Then
            cmd.CommandText = ("UPDATE Products SET Discontinued = 1 WHERE ProductId = " + ProductId.ToString)
        Else
            cmd.CommandText = ("UPDATE Products SET Discontinued = 0 WHERE ProductId = " + ProductId.ToString)
        End If
        conn.Open
        cmd.ExecuteNonQuery
        conn.Close
    End Sub
    
    或者,您可以在HiddenField控件中添加密钥:





    我希望它能帮助您……

    看看如何创建复选框列。它启用了吗?
         Protected Sub DiscontinuedCheckBox_CheckedChanged(ByVal sender As Object, ByVal e As EventArgs)
        Dim DiscontinuedCheckBox As CheckBox
        Dim ProductIdHiddenField As HiddenField
        DiscontinuedCheckBox = CType(sender,CheckBox)
        ProductIdHiddenField = CType(DiscontinuedCheckBox.Parent.FindControl("ProductIdHiddenField"),HiddenField)
        conn = New SqlConnection(ProductDataSource.ConnectionString)
     ..................
        If DiscontinuedCheckBox.Checked Then
            cmd.CommandText = ("UPDATE Products SET Discontinued = 1 WHERE ProductId = " + ProductIdHiddenField.Value)
        End If
    ...............
    End Sub