2009-06-01 4 views
0

프로그래밍 방식으로 만든 드롭 다운 목록이있는 gridview가 있습니다. 선택한 값과 해당 행 ID에 대해
액세스 권한을 갖고 싶습니다. Gridview_RowDataBound에 드롭 다운 목록이 있고 셀의 텍스트를 사용할 수 있지만 addHandler가 실행되지 않습니다. Add 핸들러는 어디에서 부여해야합니까? RowCreated에서 addhandler를 할당 할 수 있다고 생각하지만 버튼이 rowdatabound에서 생성되면 추가 처리기를 설정할 수 있습니까?드롭 다운 목록 및 gridview 행 인덱스/selectedvalue 문제

Dim deptvalue As String 
    Dim i As Integer = 0 

    Dim ddlmgr As New DropDownList 
    ddlmgr.AutoPostBack = True 
    AddHandler ddlmgr.SelectedIndexChanged, AddressOf ddlmgr_SelectedIndexChanged 
    ddlmgr.Items.Clear() 
    ddlmgr.Items.Insert(0, "--Select a Manager--") 
    ddlmgr.AppendDataBoundItems = True 
    ddlmgr.DataTextField = "Name" 
    ddlmgr.DataValueField = "number" 
    ddlmgr.DataSource = SqlDataSource2 
    ddlmgr.DataBind() 

    deptvalue = e.Row.Cells(0).Text 
    ddlmgr.Attributes.Add("onchange", "setDepart('" & deptvalue & "')") 

    If e.Row.RowType <> DataControlRowType.Pager And e.Row.RowType <> DataControlRowType.Header And e.Row.RowType <> DataControlRowType.Footer Then 
     e.Row.Cells(2).Controls.Add(ddlmgr) 
    End If 

    If e.Row.RowType <> DataControlRowType.Pager And e.Row.RowType <> DataControlRowType.Footer Then 
     e.Row.Cells(0).Style.Add("display", "none") 
    End If 

그것은 내 DropDownList로 항목이 중복되지 않기 때문에 rowData 하행에서 가장 바인딩에 맞는하지만 난 내가 만든 AddHandler에 사용할 수 있어야합니다.

답변

1

동적으로 드롭 다운을 만드는 대신 컨트롤을 gridview에 추가했습니다. 이렇게하면 Selected 값에 액세스 할 수있었습니다. 그런 다음 숨겨진 값을 숨겨진 필드의 텍스트에 숨겨진 값을 설정하는 드롭 다운 목록에 onchange 속성을 추가하여 숨겨진 값의 값을 설정합니다. 다음은 Gridview_RowDatabound에 있습니다 :

For i As Integer = 0 To GridView1.Rows.Count - 1 

     Dim ddl As DropDownList = GridView1.Rows(i).FindControl("ddlmgr") 
     Dim deptvalue As String = GridView1.Rows(i).Cells(0).Text 

     ddl.Attributes.Add("onchange", "setDepart('" & deptvalue & "')") 
    Next 
0

셀 텍스트를 사용하는 대신 rowDatabound의 e.item.DataItem을 사용하여 실제 값을 가져 오는 것이 어떨까요?

+0

텍스트가 잘 작동 ... 나는 그것을 할 수 있습니다. 하지만 그건 내 문제가 아니야. – Eric

+0

나는 당신이 왜 rowDatabound에서 그것을 할 수 없는지 이유는 텍스트가 아직 존재하지 않기 때문이라고 생각한다 - e.Row.Cells (0) .Text는 비어있어서 변경 이벤트가 실패 할 것이다. dataItem에서 rowDatabound에 값을 설정하면 제대로 작동합니다. – Rob

+0

내 질문을 거꾸로보고 있다고 생각합니다. rowDatabound에서 데이터 항목과 텍스트에 모두 액세스 할 수 있습니다. 그 rowID를 얻을 수는 있어도 addhandler를 해고 할 수 없어서 내가 선택한 값을 얻을 수 있습니다. 나는 그 질문에 대해 다시 말 할 것이다. – Eric