문제

템플릿 열과 사용자 컨트롤을 사용하여 Datagrid를 동적으로 구성 할 수있는 ASP.NET GridView가 있습니다. 이제 행을 삽입하기위한 이벤트 핸들러를 구현하고 있습니다. 이를 위해 기본값 배열을 생성하고 데이터 소스 역할을하는 데이터 테이블에 추가합니다. 그러나 onload 이벤트가 Postback에서 발사되면 모든 템플릿 열에는 더 이상 사용자 컨트롤이 없습니다. 내 GridView는 아무것도 비어 있지 않고 버튼 열이 사라집니다 (행 추가, 행 삭제 및 저장 버튼이 포함되어 있음).

내 행 추가 이벤트는 다음과 같습니다.

    public void AddDataGridRow()
    {
        List<object> defRow = new List<object>();

        for (int i = 0; i < fieldNames.Count; i++)
        {
            defRow.Add(GetDefaultValueFromDBType(types[i]));   
        }

        dt.Rows.Add(defRow);
    }

다음과 같이 구현되는 사용자 컨트롤의 버튼에서 발사됩니다.

    protected void Button1_Click(object sender, EventArgs e)
    {
        ((Scoresheet)(this.Page)).AddDataGridRow();
    }

My On Load Event는 First Run에서 GridView를 설정하기 위해 많은 것들을 수행하지만 iSpostback 속성을 사용하여 다시 실행하지 않습니다.

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            Initialize();
    }

내 사용자 컨트롤이 사라지는 이유에 대한 힌트가 있습니까?

도움이 되었습니까?

해결책

모든 Page_load에서 그리드에 컨트롤을 추가해야합니다 (! Postback).

다른 팁

UserControls 및 GridView에 EnableViewState = True가 있습니까?

초기화 ()에 의해 AddDatagrIdrow () 메소드가 호출됩니까? 기본적으로 두 가지 옵션이 있습니다.

  1. 모든 포스트 백에서 그리드를 바인딩하고 ViewState (Performace Loss)를 사용하지 마십시오.
  2. 그리드를 처음으로 만 바인딩하고 (if (! ispostback)), 사용자 컨트롤이 ViewState를 유지하는지 확인하십시오.

코드에서 사용자가 ViewState를 유지하는지 여부와 그 안에있는 내용이 확실하지 않습니다. 보여준 메소드의 실행 순서가 무엇인지는 명확하지 않습니다. 바인딩 로직이 없으므로 행을 계속 추가하더라도 그리드는 여전히 바인딩되지 않을 수 있습니다. 조금 자세히 설명하고 전체 페이지 코드를 보여주십시오.

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