1

我有一个 Gridview,它的数据源设置为 DataTable。之所以这样做,是因为所需的数据未保存在数据库中。以这种方式生成两列。我需要的是第三列有一个文本框,所以用户可以输入他们的评论等。

我的代码是

    Dim dt As DataTable = New DataTable
    Dim row As DataRow

    ' Generate Columns
    dt.Columns.Add("Col One")
    dt.Columns.Add("Col Two")
    dt.Columns.Add("Textbox Col")

    ' Populate rows with required data
    row = dt.NewRow
    row.Item("Col One") = SomeData
    row.Item("Col Two") = SecondaryData
    row.Item("Textbox Col") = InsertTextbox("data")

    ' Add row to DataTable
    dt.Rows.Add(row)

    gvData.DataSource = dt
    gvData.DataBind()

上面的代码完全符合我的要求,除了插入文本框(InsertTextbox)。文本框代码是

Private Function InsertTextbox(ByVal TBText As String) As TextBox
    Dim tbox As TextBox = New TextBox

    With tbox
        .Width = 100
        .Height = 25
        .Text = TextboxText
        .ID = TextboxText
    End With

    gvData.Controls.Add(txtbox)

    Return txtbox
End Function

上面的代码已经更改了几次,以查看我如何允许将文本框插入到 gridview 单元格中。

目前我根据需要取回数据,但 Textbox Col 显示为 System.Web.UI.WebControls.TextBox。添加 .Text 会显示文本(在本例中为数据),但它以标签格式显示,这意味着您无法在其中输入任何内容。

谁能建议我如何以这种方式插入文本框?

谢谢

4

1 回答 1

0

Templatefield在 gridview 中定义 a并PlaceHolderTemplatefield.

<asp:GridView ID="GridView1" runat="server" >
   <Columns>
      <asp:TemplateField>
         <ItemTemplate>
              <asp:PlaceHolder ID="PlaceHolder_InputControl" runat="server" />
         </ItemTemplate>
       </asp:TemplateField>
   </Columns>

使用RowCreated event动态添加文本框:

Protected Sub GridView1_RowCreated(sender As Object, e As GridViewRowEventArgs)

    If e.Row.RowType = DataControlRowType.DataRow Then
        Dim pc1 As PlaceHolder = DirectCast(e.Row.Cells(0).Controls(1), PlaceHolder)
        Dim tb As TextBox = New TextBox
        With tb
                .Width = 100
                .Height = 25
                .Text = TextboxText
                .ID = TextboxText
        End With
        pc1.Controls.Add(tb)
    End If

End Sub
于 2012-09-27T16:08:27.957 回答