我有一个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会显示文本(在本例中为数据),但它以标签格式显示,这意味着您无法在其中输入任何内容。
有人可以建议我如何以这种方式插入文本框吗?
由于
答案 0 :(得分:0)
在网格视图中定义Templatefield
,并在PlaceHolder
内放置Templatefield
控件。
<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