문제

나는 운이없는 비슷한 질문을 찾고 있습니다. 내가하고 싶은 것은 특정 항목의 경우 링크 버튼을 보여주고 다른 항목에는 하이퍼 링크를 보여주는 그리드 뷰를 가지고 있습니다. 이것은 내가 현재 가지고있는 코드입니다.

public void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        var data = (FileDirectoryInfo)e.Row.DataItem;
        var img = new System.Web.UI.HtmlControls.HtmlImage();
        if (data.Length == null)
        {
            img.Src = "/images/folder.jpg";
            var lnk = new LinkButton();
            lnk.ID = "lnkFolder";
            lnk.Text = data.Name;
            lnk.Command += new CommandEventHandler(changeFolder_OnCommand);
            lnk.CommandArgument = data.Name;
            e.Row.Cells[0].Controls.Add(lnk);
        }
        else
        {
            var lnk = new HyperLink();
            lnk.Text = data.Name;
            lnk.Target = "_blank";
            lnk.NavigateUrl = getLink(data.Name);
            e.Row.Cells[0].Controls.Add(lnk);
            img.Src = "/images/file.jpg";
        }
        e.Row.Cells[0].Controls.AddAt(0, img);
    }
}

첫 번째 셀은 템플릿 필드입니다. 현재 모든 것이 올바르게 표시되지만 LinkButtons는 명령 이벤트 핸들러를 제기하지 않으며 모든 컨트롤이 포스트 백에서 사라집니다.

어떤 아이디어?

도움이 되었습니까?

해결책

나는 당신이 Gridview의 반창기를 강요해야한다고 생각합니다. ...에 포스트 백. 이를 통해 동적 컨트롤이 재현되고 이벤트 처리기가 다시 부착 될 수 있습니다. 이것은 또한 포스트 백 후에 그들의 실종을 방지해야합니다.

IOW, 전화 DataBind() Postback의 그리드 뷰에서.

다른 팁

Row_created 이벤트에 추가 할 수 있으며 취소 할 필요가 없습니다! Postback Check.

버튼을 선언적으로 만들고 Hypen을 선언적으로 만들고 (문자 그대로 제어를 사용하여) 데이터 바인딩 구문을 사용하고 컨트롤의 가시적 특성을 필요에 따라 true 또는 false로 설정하십시오.

Visible='<%#((FileDirectoryInfo)Container.DataItem).Length == null) %>' 

그런 것.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top