我有一个简单的GridView
;对于普通人来说是这样的Item
or AlternatingItem
row:
+----+-------------+----------+
| ID | Description | Value |
+====+=============+==========+
| 01 | Some text | 0.082 |
+----+-------------+----------+
| 02 | Some text | Yes |
+----+-------------+----------+
| 02 | Some text | 9/4/2009 |
+----+-------------+----------+
当用户选择编辑行GridView
,只有“值”列才可编辑。我想以某种方式,基于该行的属性DataItem
,渲染一个控件(在我的例子中,要么是常规的TextBox
对于十进制值,aDropDownList
对于“是/否”布尔值,或者更复杂的东西,例如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
我要决定在其中构建什么类型的控件InstantiateIn()
方法。
这可能吗?我想我应该这样做以保持干净并且全部集中在一个地方。
如果您已经读到这里,谢谢!还有一点:有没有办法改变ItemTemplate
对于单个单元格,例如,通过覆盖RowDataBound
的事件处理程序GridView
?我在互联网上搜索了很长时间,寻找有人这样做的例子,但我找不到一个。我见过一些他们发现的例子GridViewRow
通过container
通过强制转换变量Parent
or NamingContainer
属性到一个GridViewRow
,但两者总是Nothing
当我看着他们的时候。
我还尝试过将 CSS 类分配给DataControlFieldCell
是在GridView
's RowCreated
事件,然后在InstantiateIn
方法并使用它来确定要呈现哪个控件。问题在于它仅适用于行的初始创建,但是一旦用户点击“编辑”并重新绑定,DataItem
行上的 s 返回到Nothing
s 和RowCreated
抛出一堆“对象未设置...”博洛尼亚。
那么...有人有什么想法吗?