2012-05-21 2 views
1

나는이 마크 업을 Visible 속성이 올바르게 설정되지만 단추가 변경되는 것을 결코 보지 못합니다. 편집 버튼을 눌렀는데 편집 모드에 있지만 편집 버튼은 계속 표시되며보기 버튼은 여전히 ​​숨겨져 있습니다. 나는 object sender 변수를 사용하는 대신 직접 dvDatabase.FindControl을 통해 버튼을 찾으려고 시도했지만 그 중 하나는 작동하지 않습니다. 마크 업에서 ID 속성을 기반으로하는 변수를 가진 버튼을 참조하려고했지만 btnViewbtnEdit 변수/속성이 없습니다. 무슨 일이야?ASP.NET은 DetailsView는 HeaderTemplate에서 버튼 가시성 변화가 OnModeChanging 처리기에서 작동하지

편집 : Tim의 제안에 따라 OnModeChanged으로 바뀌었지만 버튼은 여전히 ​​변경되지 않습니다.

protected void dvDatabase_ModeChanged(object sender, EventArgs e) 
{ 
    DetailsView view = /*(DetailsView)sender*/dvDatabase; 
    bool isEdit = DetailsViewMode.Edit == view.CurrentMode; 
    LinkButton viewButton = (LinkButton)view.FindControl("btnView"); 
    LinkButton editButton = (LinkButton)view.FindControl("btnEdit"); 
    viewButton.Visible = isEdit; 
    editButton.Visible = !isEdit; 
} 

내가 dvDatabase 클래스 변수뿐만 아니라 object sender를 사용했지만, 어느 쪽도 영향을 미칠 것 같았다 : 여기 내 C# 지금입니다.

+0

_ "마크 업에서 ID 속성을 기반으로하는 변수가있는 단추를 참조하려고했습니다."_ 그 의미는 무엇입니까? 보이는 속성이 올바르게 설정되었다고 했으므로 _ "btnView 및 btnEdit 변수/속성이 존재하지 않습니다"_? –

+0

'FindControl'을 통해 버튼을 찾을 수 있습니다. 그리고 디버거를 따라 가서'Visible' 속성을 올바르게 설정하는 값을 보았습니다. 그러나'MyView.aspx.designer.cs 자동 생성 클래스에는 'DetailsView'와 달리'btnView' 또는'btnEdit' 변수가 없습니다. 이 예상 될 수 있습니다, 나는 모든 dev에 생성 된 얻을지 않습니다 ASP.NET dev에 새로운 해요. –

+1

이는 NamingContainer가 페이지 자체 인 컨트롤 만이 designer.cs 파일에서 초기화되고 액세스 할 수 있기 때문에 정상입니다. 다른 모든 요소는 페이지 수명주기 동안 초기화됩니다. 어쨌든, 그건 왜 당신의 버튼들이 그들의 가시적 인 상태를 바꾸지 않았는지를 설명하지 못합니다. 포스트 백에서'DetailsView'를 어딘가에 databinding하고 있습니까? 그것은 이유 일 수 있습니다. –

답변

2

대신 DetailsViewDataBound 이벤트를 사용하고 DetailsView if(!Page.IsPostback) 만 데이터 바인딩합니다. ItemCommand 이벤트를 처리하여 ChangeMode method을 적절히 호출하고 DetailsView을 데이터 바인딩해야합니다.

protected void dvDatabase_DataBound(Object sender, EventArgs e) 
{ 
    var view = (DetailsView)sender; 
    var btnView = (Button)view.FindControl("btnView"); 
    var btnEdit = (Button)view.FindControl("btnEdit"); 
    switch (view.CurrentMode) 
    { 
     case DetailsViewMode.ReadOnly: 
      btnView.Visible = false; 
      btnEdit.Visible = true; 
      break; 
     case DetailsViewMode.Edit: 
      btnView.Visible = true; 
      btnEdit.Visible = false; 
      break; 
     case DetailsViewMode.Insert: 
      btnView.Visible = false; 
      btnEdit.Visible = false; 
      break; 
     default: 
      break; 
    } 
} 
+0

감사합니다. –