0

いくつかのものを追加するためだけにプロジェクトに取り組んでいますが、そのうちの1つは、行の編集ボタンを押したときにGridViewにDropDownListを追加することです...悲しいことに、列はデータベースバインディングの前に実行時に追加され、aspxではありません私が見つけたすべての例としてのページ、私はこのようにここにそれを持っています:

private void SetColumnsGrid(GridView Grid)
    {
        BoundField Col = new BoundField();//1
        Col.HeaderText = "Name";
        Col.DataField = "Name";
        Col.HeaderStyle.Width = Unit.Pixel(100);
        Col.ReadOnly = true;
        Grid.Columns.Add(Col);

        Col = new BoundField(); //2
        Col.HeaderText = "User Type";
        Col.DataField = "UserType";
        Col.HeaderStyle.Width = Unit.Pixel(100);
        Grid.Columns.Add(Col);

        //Is ddl spected to be here as the TemplateField with the EditItemTemplate?
}

だから、どうすればそれを行うことができますか?私は正しい方法を見つけられません。どのイベントを処理する必要がありますか?

どうもありがとうございます

4

1 に答える 1

1

使用できるオプションがいくつかあります。1つはテンプレートを使用する方法で、もう1つは行の作成時に手動でコントロールを追加する方法です。テンプレートの例(これはチェックボックスを使用しますが、簡単に切り替えることができます):

Public Class CheckBoxTemplate
    Implements ITemplate   

    Public Sub InstantiateIn(ByVal container As System.Web.UI.Control) Implements System.Web.UI.ITemplate.InstantiateIn
        Dim cb As CheckBox = New CheckBox()
        cb.ID = "someId"
        cb.AutoPostBack = True

        container.Controls.Add(cb)


    End Sub
End Class

グリッドビューコントロールを作成するアプリコードでは、次のようになります。

    Dim gv As New GridView
    With gv
        .ID = "myGridView"
        .AutoGenerateColumns = False
        .DataKeyNames = New String() {"somePKID"}
        .GridLines = GridLines.Both
        .AllowSorting = False
        .AllowPaging = False
        .PageSize = numRows
        .Width = tableWidth
        .BorderColor = Drawing.ColorTranslator.FromHtml("#808080")
        .PagerSettings.Mode = PagerButtons.NextPrevious
        .PagerSettings.NextPageText = "Next"
        .PagerSettings.PreviousPageText = "Prev"
        .HeaderStyle.CssClass = foundUserHeadStyle
        .RowStyle.CssClass = foundUserEvenRows
        .AlternatingRowStyle.CssClass = foundUserOddRows
        .Columns.Clear()

        Dim SelectUserTF As New TemplateField
        With SelectUserTF
            .HeaderText = "Add"
            .ItemStyle.Wrap = False
            .ItemTemplate = New CheckBoxTemplate()
        End With
       .Columns.Add(SelectUserTF)

   End With

別のオプションは、行の作成イベントでこれを行うことです。

     Protected Sub gv_rowCreated(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles myGridView.RowCreated
    Try
        Dim myDDL As New DropDownList
        Dim myCollection As New ListItemCollection
        With myCollection
            Dim newItem As New ListItem
            newItem.Text = "item 1"
            newItem.Value = "1"

            .Add(newItem)
        End With
        e.Row.Cells(0).Controls.Add(myDDL)
  Catch ex As Exception

    Finally

    End Try
end sub

これが役立つかどうか、または質問がある場合はお知らせください。

于 2013-03-27T11:26:50.000 に答える