2012-03-08 5 views
0

나는 그리드보기에서 날짜 상자 사용자 정의 컨트롤을 가지며 속성 중 하나는 RowID입니다. 나는 변화를 할 때 지금격자보기에서 사용자 정의 컨트롤

protected void Page_Load(object sender, EventArgs e) 
    { 

     txtDate.Attributes.Add("onchange", "getRow(" + RowID + ")"); 

    } 
    public int RowID 
     { 
      get; 
      set; 
     } 

: GRIDVIEW에서 나는이 같은 자바 스크립트 함수를 호출하는 속성을 추가하고 해당 UserControl의 pageload에

<uc2:datePage1 ID="txtSubToSA" RowID=<%# Container.DataItemIndex %> runat="server" Enabled="true" Text= '<%#Eval("SUBMITTED_TO_SA") %>' /> 

로 datebox에 행 ID를 전달하고있다 GridView의 날짜 상자에서 어떤 행이든 관계없이 항상 RowID를 0으로하고 다른 행에서 변경 한 내용을 인식하지 못합니다. 내가 여기서 잘못하고있는 것은 무엇입니까?

답변

0

RowId이 설정되기 전에 Load 이벤트 처리기에 onchange 특성을 추가하는 중입니다. 데이터 바인딩 중에 발생합니다. 당신은 아마 DataBind을 무시하고 데이터 바인딩이 완료된 후 속성을 설정할 수 있습니다 :

public override void DataBind() 
{ 
    base.DataBind(); 
    txtDate.Attributes.Add(...); 
} 
+0

당신은 UserControl 또는 Gridview의 DataBind를 의미합니까? Usercontrol은 간단한 텍스트 상자 및 Ajax 제어 캘린더 익스텐더입니다. 이 사용자 정의 컨트롤은 gridview의 다양한 열에서 사용됩니다. 텍스트 상자 사용자 제어 값의 텍스트가 변경된 행에서 onchange 이벤트를 발생시키고 싶습니다. – user799891

+0

페이지로드가 아닌 속성에서 속성을 설정하여 문제를 해결했습니다. 팁 고마워! 이것이 내가 한 일이며 효과가있었습니다. 'code'public INT는 { 가 { txtDate.Attributes.Add 설정 ROWID ("onchange를", "를 getRow ("+ 값 + ")"); } } – user799891

+0

@ user799891 - UserControl의 'DataBind' 메소드를 의미합니다. txtDate에 액세스하려면 UserControl에 있어야합니다. 그러나 속성 설정자에서 속성을 추가하는 해결책은 너무 효과적입니다. RowId가 데이터 바인딩을 사용하는 대신 프로그래밍 방식으로 설정된 경우 더 좋은 해결책이 될 수 있습니다. – Joe

0

당신은 대신을 시도 할 수 -

protected void Page_LoadComplete(object sender, EventArgs e) 
{ 
    txtDate.Attributes.Add("onchange", "getRow(" + RowID + ")"); 
} 

전체 페이지로드에

protected void Page_Load(object sender, EventArgs e) 
{ 
    txtDate.Attributes.Add("onchange", "getRow(" + RowID + ")"); 
} 

의 코드를 이동 데이터가로드 된 후 이벤트가 시작됩니다.