1

データソースが DataTable に設定されている Gridview があります。これは、必要なデータがデータベースに保持されていないために行われました。このようにして 2 つの列が生成されます。ユーザーがコメントなどを入力できるように、テキスト ボックスを持つ 3 番目の列が必要です。

私のコードは

    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

上記のコードは、グリッドビュー セルにテキスト ボックスを挿入できるようにする方法を確認するために数回変更されています。

現在、必要に応じてデータを取得していますが、Textbox Col は System.Web.UI.WebControls.TextBox として表示されます。.Text を追加すると、テキスト (この場合はデータ) が表示されますが、ラベル形式で表示されるため、その中には何も入力できません。

この方法でテキストボックスを挿入する方法を教えてもらえますか?

ありがとう

4

1 に答える 1

0

Templatefieldgridview で を定義し、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
于 2012-09-27T16:08:27.957 に答える