2013-03-27 1 views
0

프로젝트에 몇 가지 작업을 추가하기 만하면 행의 편집 단추를 누를 때 GridView에 DropDownList를 추가하는 것입니다. 그래서코드에서 DataGridView asp.Net의 편집에 DropDownList를 동적으로 추가합니다.

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? 
} 

, 나는 그것을 어떻게 할 수 : 데이터베이스가없는 내가 찾은 모든 예제와 영문 페이지에 바인딩하기 전에 슬프게도 열이 나는 이렇게 여기에서, 런타임에 한 추가? 나는 단지 적절한 방법을 찾지 못한다. Whitch 이벤트를 처리해야합니까?

고맙습니다.

답변

1

몇 가지 옵션을 사용할 수 있습니다. 하나는 템플릿을 사용하고, 다른 하나는 행을 만들 때 컨트롤을 수동으로 추가하는 것입니다. 템플릿 예제 (이 체크 박스를 사용하지만 쉽게 전환 할 수 있습니다) :

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 

또 다른 옵션은 생성 행에서이 작업을 수행하는 것입니다 : 당신이 GridView 컨트롤을 만들 앱 코드에서

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 

, 이벤트 :

 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 

내가 도움이되는지 또는 궁금한 점이 있으면 알려주십시오.

+0

결국 나는 상사에게 낡은 방법으로 그것을하도록 설득했다. 도움을 주셔서 감사합니다. 다음 번에이 문제가 나올 때마다 도움이 될 것입니다. –

관련 문제