2010-01-06 4 views
0

I는 영문 페이지 I는 시간 및 공정 (AT 표 한 행을 반복 할대하여 반복 C#

1.CheckBox 2.Text 3.Text 4.TextBox 

같은 열이 (C 번호)에 HTML 테이블을 확인란을 선택했는지 여부에 따라 column2 기반의 저장 프로 시저를 실행하십시오. 어떻게 할 수 있습니까? 당신이 테이블 서버 컨트롤을 사용하는 가정

답변

5

그때는 그냥 :

foreach (TableRow row in table.Rows) 
    { 
     var checkBox = (CheckBox)row.Cells[0].Controls[0]; //Assuming the first control of the first cell is always a CheckBox. 

     if (checkBox.Checked) 
     { 
      var col2 = (TextBox)row.Cells[1].Controls[0]; 

      /* Do Stuff With col2 */ 
     } 
     else 
     { 
      /* Do Stuff */ 
     } 
    } 

그냥 일반 HTML 테이블을 사용하는 경우뿐만 아니라 HTML 양식 컨트롤 (RUNAT = "서버"와) 그럼 그냥 TableRow를 HtmlTableRow, CheckBox를 HtmlInputCheckBox, TextBox를 HtmlInputText로 변경하십시오. 이러한 모든 컨트롤은 System.Web.UI.HtmlControls 네임 스페이스에 있습니다.

+0

표의 첫 번째 열에 체크 박스가 있는지 확인하기 위해 수정할 수 있습니까? – Jaelebi

+0

예. var checkBox = row.Cells [0] .Controls [0] as CheckBox; 다음 줄에 : if (checkBox! = null && checkBox.Checked) {} –

0

html의 table 태그에 runat = "server"속성을 추가하면이 테이블을 Control 객체의 컬렉션으로 볼 수 있고 반복 할 수 있어야합니다.

그러나 이것은 동적 데이터를 얻는 최악의 방법과 같습니다. 아마도 약간의 배경으로 우리는 당신이 더 좋은 방법을 찾을 수 있도록 도울 수 있습니다 ...

1

나는 이미 이것을 할 수있는 편리한 VB.NET 코드를 가지고있었습니다. 방금 약간의 조정이있었습니다. C#으로 쉽게 이식 될 수 있습니다.

Protected Sub Page_Load() 
    FindCheckBoxes(MyTable) 
End Sub 

Protected Sub FindCheckBoxes(ByRef ParentControl As Control) 
    For Each ctrl As Control In ParentControl.Controls 
     If TypeOf ctrl Is CheckBox Then 
      If DirectCast(ctrl, CheckBox).Checked Then 
       ' do something 
      Else 
       ' do something else 
      End If 
     ElseIf ctrl.HasControls Then 
      FindCheckBoxes(ctrl) 
     End If 
    Next 
End Sub 

이것은 테이블뿐만 아니라 모든 내부에서 확인란을 찾을만큼 유연합니다. 그러나 특정 시나리오에서 noblethrasher의 대답과 같은 것을 사용하는 것이 좋습니다.

내 대답은 모든 단일 확인란을 찾아 트리를 통해 크롤링하는 재귀 적 방법입니다. 그러나 noblethrasher는 체크 박스를 찾을 열을 알고 있고 추가 컨테이너 안에 묻히지 않았다는 것을 알고 있으면 간단하고 직접적이며보다 효율적인 알고리즘입니다.