代码之家  ›  专栏  ›  技术社区  ›  Cᴏʀʏ bcherry

基于DataItem属性的itemplate的instantain()方法中的动态控件类型。有办法吗?

  •  2
  • Cᴏʀʏ bcherry  · 技术社区  · 16 年前

    我有一个简单的 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…”博洛尼亚。

    所以…有什么想法吗?

    1 回复  |  直到 16 年前
        1
  •  1
  •   Cᴏʀʏ bcherry    16 年前

    我按照我对Pjabbott的评论中解释的路线去了。

    推荐文章