2011-12-07 3 views
0

테이블을 동적으로 바인딩하는 다음 코드를 사용하는 함수가 있습니다. 페이지로드시이 함수를 호출합니다. 이 메서드가 호출 된 후 테이블에는 세 개의 열, 즉 확인란, 레이블 및 텍스트 상자가 포함됩니다.html 테이블 바인딩 문제

또한 버튼 컨트롤이 있습니다. 이 버튼을 클릭하면 테이블 안의 체크 된 체크 박스를 체크 한 다음 체크 박스에 해당하는 데이터를 데이터베이스에 삽입합니다.

문제는 단추를 클릭 할 때 체크 박스의 체크 상태를 저장하지 않는다는 것입니다. 버튼 클릭 또한 페이지로드를 호출하기 때문에 아래 함수를 호출하므로 테이블의 모든 요소가 다시 만들어집니다.

버튼을 클릭 할 때 테이블을로드해야하기 때문에 여기에서 Page.IsPostBack을 사용할 수 없습니다. 나는 내 아래의 코드를 작성하는 경우 경우 (! Page.IsPostBack) 다음 버튼은

try 
{ 
    ManageVIN objMngVin = new ManageVIN(); 
    DataTable tblVins = objMngVin.MyFunction(clientCode); 
    if (tblAssociateFleet.Rows.Count > 1) 
    { 
     for (int i = 1; i <= tblAssociateFleet.Rows.Count - 1; i++) 
     { 
      tblAssociateFleet.Rows[i].Cells.Clear(); 
     } 
    } 
    if (tblVins != null && tblVins.Rows.Count > 0) 
    { 
     foreach (DataRow dr in tblVins.Rows) 
     { 
      HtmlTableRow tblRow = new HtmlTableRow(); 
      tblRow.Attributes.Add("class", "tblrow"); 
      HtmlTableCell tblCell1 = new HtmlTableCell(); 
      CheckBox chk = new CheckBox(); 
      chk.CssClass = "selctChk"; 
      if (!Page.IsPostBack) 
      { 
       chk.Checked = false; 
      } 
      tblCell1.Controls.Add(chk); 
      HtmlTableCell tableCelll2 = new HtmlTableCell(); 
      Label lblVinVlaue = new Label(); 
      lblVinVlaue.Text = Convert.ToString(dr["VIN"]); 
      tableCelll2.Controls.Add(lblVinVlaue); 
      HtmlTableCell tableCell3 = new HtmlTableCell(); 
      TextBox txtVinVal = new TextBox(); 
      txtVinVal.CssClass = "textEntry"; 
      tableCell3.Controls.Add(txtVinVal); 
      tblRow.Cells.Add(tblCell1); 
      tblRow.Cells.Add(tableCelll2); 
      tblRow.Cells.Add(tableCell3); 
      tblAssociateFleet.Rows.Add(tblRow); 
     } 
    } 
} 

가 어떻게이 문제를 해결할 수있는 테이블의 모든 행을 찾는되지 클릭?

답변

1

Init 또는 PreInit 수명주기에서이 작업을 수행해야합니다. PreInit은 MS에 따라 선호되는 장소입니다. take a look at the ASP.NET page life cycle로드가 너무 늦습니다 (특히 체크 박스 클릭의 포스트 백 데이터를 처리하는 IPostBackDataHandler.LoadPostData가 없습니다).

또한 이것은 to this stack overflow question과 유사합니다.

+0

함수를 호출하는 동안 preinit에서 처음에는 정상적으로 작동하지만 현재는 같은 함수를 호출하는 OnSelectedIndexChange도 있습니다. 드롭 다운에서 값을 변경하고 드롭 다운 목록에서 선택된 인덱스를 클릭하면 문제가 발생합니다. 함수에서 기본값으로 변경되었습니다. – Mac

1

당신이하고있는 방식이 꽤 정확한 것 같습니다.

그러나 한 가지 문제가 있습니다.

if (!Page.IsPostBack) 
{ 
    chk.Checked = false; 
} 

해당 블록을 완전히 제거하십시오. 문제는 포스트 백 asp.net에서 실제로 페이지를 두 번 렌더링한다는 것입니다. 첫 번째 렌더링에서 해당 행은 확인란의 상태를 종료합니다.

저는 Hexxagonal이 수명주기의 init 또는 preinit 부분에서 이렇게 말한 것을 알고 있지만 동적으로 컨트롤을 생성하는 많은 페이지가 있습니다. 우리는 항상 page_load에서 생성을 처리하고 완벽하게 작동합니다.

+0

해당 블록을 제거한 후에도 결과는 동일합니다. – Mac