我有一个简单的GridView
;类似于常规Item
或AlternatingItem
行的内容:
+----+-------------+----------+
| ID | Description | Value |
+====+=============+==========+
| 01 | Some text | 0.082 |
+----+-------------+----------+
| 02 | Some text | Yes |
+----+-------------+----------+
| 02 | Some text | 9/4/2009 |
+----+-------------+----------+
当用户选择在GridView
中修改一行时,只有“值”列才可以编辑。我想以某种方式,基于该行的DataItem
的属性,呈现一个控件(在我的例子中,对于十进制值是常规TextBox
,对于“是/否”是DropDownList
“booleans,或更复杂的东西,如带有某些Calendar控件的TextBox
”,用于根据其类型编辑该值。
对于初学者来说,包含上述信息的对象上有一个DataFormat
属性,它具有确定要呈现哪个控件所需的值。我有一个自定义ITemplate
控件。它的InstantiateIn()
方法如下:
Public Sub InstantiateIn(ByVal container As Control) Implements ITemplate.InstantiateIn
Select Case Me.ItemType
Case UDFTemplate.Value
Dim valueLabel As New Label()
AddHandler valueLabel.DataBinding, AddressOf ControlDataBinding
container.Controls.Add(valueLabel)
Case UDFTemplate.EditValue
' I don't always want a text box... I want to decide what to create here.
Dim editBox As New TextBox()
editBox.Columns = 15
AddHandler editBox.DataBinding, AddressOf ControlDataBinding
container.Controls.Add(editBox)
End Select
End Sub
我的目标是以某种方式到达DataItem
我GridViewRow
的{{1}}属性,以决定在InstantiateIn()
方法中构建什么类型的控件。
这可能吗?我以为我会这样做,以保持清洁,并在一个地方。
如果您已经读过这篇文章了,谢谢!再多一点:是否可以通过覆盖ItemTemplate
的{{1}}事件处理程序来改变单个单元格的RowDataBound
?我已经搜索了互联网很长一段时间寻找一个人做这个的例子,但我找不到一个。我已经看到了一些示例,他们通过将GridView
或GridViewRow
属性转换为container
来查找Parent
到NamingContainer
变量,但两者都是我看过它们时总是GridViewRow
。
我也尝试过在Nothing
的{{1}}事件中为DataControlFieldCell
分配CSS类,然后在GridView
方法中找到它并使用它来确定要渲染的控件。问题在于它只适用于行的初始创建,但只要用户点击“编辑”并重新绑定,行上的RowCreated
就会回到InstantiateIn
s和DataItem
抛出了一堆'对象未设置......'博洛尼亚。
那么......有什么想法吗?
答案 0 :(得分:1)
我选择了回应pjabbott的评论中解释的路线。