вы можете попробовать вот так ..
Это по замыслу;строки в GridView по умолчанию не редактируются.
Существует два способа решения этой проблемы:
Добавить ссылку редактирования
В теге GridView добавьте AutoGenerateEditButton="True"
.Когда ваш GridView визуализируется в браузере, вы должны найти гиперссылку с надписью «Изменить».Если вы щелкнете по нему, поля в вашем GridView станут редактируемыми, и ссылка «Изменить» станет двумя ссылками: одна для сохранения ваших изменений в базе данных, а другая для их отмены.Используя этот метод, вы можете выполнить всю работу по подключению изменений в GridView к базе данных, в зависимости от того, как вы делаете привязку данных.В этом примере используется элемент управления SqlDataSource.
альтернативный текст http://philippursglove.com/stackoverflow/checkboxgridview1.png альтернативный текст http://philippursglove.com/stackoverflow/checkboxgridview2.png
Добавление TemplateField с CheckBox внутри него
Внутри тега <columns>
,Вы можете добавить TemplateFields, которые вы устанавливаете для себя, например,
<asp:TemplateField HeaderText="Discontinued"><br>
<ItemTemplate><br>
<asp:CheckBox runat="server" ID="DiscontinuedCheckBox" Checked="<%# Eval("Discontinued") %>" AutoPostback="true" OnCheckedChanged="DiscontinuedCheckBox_CheckedChanged" /><br>
</ItemTemplate><br>
</asp:TemplateField>
alt text http://philippursglove.com/stackoverflow/checkboxgridview3.png
Этот флажок будет включен, но вам нужно сделать работу самостоятельно, чтобы отразить любые изменения обратно в базу данных.Это просто, если вы можете получить ключ базы данных, так как вам нужно будет запустить оператор 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.:
<asp:TemplateField HeaderText="Discontinued"><br>
<ItemTemplate><br>
<asp:hiddenfield runat="server" id="ProductIdHiddenField" Value='<%# Eval("ProductID") %>' />
<asp:CheckBox runat="server" ID="DiscontinuedCheckBox" Checked="<%# Eval("Discontinued") %>" AutoPostback="true" OnCheckedChanged="DiscontinuedCheckBox_CheckedChanged" /><br>
</ItemTemplate><br>
</asp:TemplateField>
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
Надеюсь, это поможет вам ....