当gridview行处于编辑模式时,我使用哪个事件来更改控件?

时间:2014-05-15 08:39:17

标签: vb.net events gridview

我有一个包含编辑和项目模板的gridview。我想要做的是基于其中一列的值,当一行在editmode中时,使两个文本框成为readonly或readwrite。

项目模板由两个图像按钮组成,编辑/删除三个标签(Primary,Secondary和IsSecondary)。编辑模板有两个图像按钮取消/保存,两个文本框(主要和辅助)和一个下拉选择主要或次要)

我想要做的是将两个文本框设置为只读,如果在进入编辑模式时,Dropdown值为Secondary。基本上,当Value为Secondary时,用户只能切换到Primary,但不能编辑文本框中的值。如果值为Primary,则可以编辑其值。

我尝试将以下内容添加到RowDataBound事件

If e.Row.RowState = DataControlRowState.Edit Then
    If ddl_IsSecondary.SelectedValue = 1
        tb_Primary.ReadOnly = True
        tb_Secondary.Readonly = True
    Else
        tb_Primary.ReadOnly = False
        tb_Secondary.Readonly = False
    End If
End If

不幸的是,无论下拉列表的值如何,都会对文本框进行读写。

关于我还能尝试什么的任何想法?

2 个答案:

答案 0 :(得分:0)

IMO您需要使用DataGridView.CellBeginEdit event。 MSDN声明:

  

在为所选单元格启动编辑模式时发生。

Private Sub DataGridView1_CellBeginEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles DataGridView1.CellBeginEdit
    ' Check your ddl_IsSecondary here and act accordingly.
End Sub

如果正在编辑的单元格是包含下拉列表的单元格,您可能也应该忽略该事件。

答案 1 :(得分:0)

谢谢Pasty ......我没有尝试过你的答案,但会看看......我实际上找到了答案......我的测试碰巧是在一个偶数行上,这是一个备用行。所以我的行

If e.Row.RowState = DataControlRowState.Edit Then...

未被触发...将代码更改为

If e.Row.RowState = DataControlRowState.Edit OR e.Row.RowState = DataControlRowState.Alternate + DataControlRowState.Edit Then...

工作得很好......