我有一个简单的
GridView
像这样的普通菜
Item
或
AlternatingItem
行:
+----+-------------+----------+
| ID | Description | Value |
+====+=============+==========+
| 01 | Some text | 0.082 |
+----+-------------+----------+
| 02 | Some text | Yes |
+----+-------------+----------+
| 02 | Some text | 9/4/2009 |
+----+-------------+----------+
当用户选择编辑
GRIDVIEW
,只有“值”列才可编辑。我想根据那一行的属性
DataItem
,呈现控件(在我的示例中,不是
TextBox
对于十进制值,a
DropDownList
对于“是/否”的布尔值,或更复杂的值,如
文本框
使用一些日历控件)根据其类型编辑该值。
因此,对于初学者,包含上述信息的对象具有
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
我的目标是以某种方式
数据项
性质
GridViewRow
我要决定在
实例()
方法。
这有可能吗?我想我会这样做,以保持它的清洁和所有在一个地方。
如果你读了这么多,谢谢!再多一点:有没有办法改变
ItemTemplate
对于单个单元格,例如,通过重写
RowDataBound
的事件处理程序
GRIDVIEW
?我已经找了很长一段时间的互联网寻找一个这样做的例子,但我找不到一个。我看到了一些例子,他们发现
一列
通过
container
变量通过投射
Parent
或
NamingContainer
属性到
一列
但两者都是
Nothing
当我看着他们的时候。
我还尝试过将CSS类分配给
DataControlFieldCell
S在
GRIDVIEW
的
RowCreated
事件,然后在
InstantiateIn
方法并使用它来确定要呈现哪个控件。问题在于,它只在初始创建行时起作用,但是一旦用户点击“编辑”并重新绑定,那么
数据项
排上的S回到
没有什么
S和
划线的
抛出一堆“object not set…”博洛尼亚。
所以…有什么想法吗?