2009-10-21 1 views
3

는 내용이있는 표시되는 데이터는 포스트 백 이벤트를.NET C#을 게시 내가있는 gridview를

  • 페이지가로드
  • 사용자가 드롭 다운 목록에 의존 accessdatasource에서 제공 바운드 텍스트 상자를 덮어

지금까지 이렇게 좋은있는 gridview에 새 데이터로 드롭 다운 메뉴에서 항목

  • 페이지를 다시로드를 선택

    텍스트 박스는 ItemTemplate을에 을 (표준 '수정'링크를 사용하지 않도록 더 나가 수)

    이 텍스트 상자는 사용자가 업데이트하고 전송하는 편집 가능한 데이터를 포함

    내가 다음 그리드 뷰에 텍스트 상자를 추가 한 업데이트 버튼을 클릭하면 서버로 돌아갑니다. 내가 드롭 다운에서 선택을 변경하는 경우

    문제가있는 gridview에 업데이트가해야하지만 텍스트 상자 그들이 <퍼센트 번호 바인드 ("vr_total") %>

    I와 결합 된 경우에도 이전 값을 유지로 이것이 포스트 백 데이터에 의해 야기되고 바인딩이 발생한 후에 데이터가 덮어 쓰기된다고 가정 할 수 있습니다. (그렇지 않으면 바인드가 예기치 않은 데이터를 덮어 씁니다.)

    누군가이 동작을 어떻게 바꿀 수 있습니까? < 입력을 텍스트 상자 :

    viewstate가이

    내가 < ASP를 교체 할 경우 .. 내가 .NET 및 C#

    DC

    또 발전에 새로운 오전 거짓

    로 설정 type = "text"value = "% # Eval ("vr_total ") %>"...> 그리드가 예상대로 정확하게 작동합니다.

    데이터가 바인딩되었을 때 gridview가 자식 컨트롤을 채우지 만 textbox가 해당 viewstate가 비활성화되어 있어도 게시 된 항목 (포스트 백 이벤트를 통해)에 덮어 쓰게되는 문제가있는 것으로 보입니다.

  • +0

    을 확인하려면, 그것은 소리 너의 질문. 사용자가 업데이트 버튼을 클릭하면 어떻게됩니까? 업데이트 단추의 Click 이벤트 처리기에서 코드가 실행되고 있는지 확인 했습니까? 그렇다면 코드가 올바르게 실행되고 있습니까? 그것에 관한 더 많은 정보를 제공해 주시겠습니까? –

    +0

    업데이트 버튼은 무시해도됩니다. 사용자가 변경 한 내용을 업데이트하기로 결정한 후에 만 ​​적용됩니다. 그러나 대답을 위해서 click 이벤트는 버튼에 대해 실행 중입니다. 그리드에는 업데이트 기능이없는 데이터 만 표시됩니다. 표에 레이블 필드를 추가했는데 올바르게 변경되었습니다. 더 많은 읽기가이 페이지로 이동했습니다. http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx 텍스트 상자가 자체 viewstate를 유지한다는 것을 추측합니다. 따라서 viewstates를 비활성화하면 도움이되지 않습니다. 슬프게도 해결 방법에 대한 단서가 없음 – DeveloperChris

    답변

    3

    Chris, 컨트롤에는 ControlState라는 알려진 컨트롤이 있으며, 비활성화 할 수 없습니다. 발생하는 문제는 페이지로드시로드 및 바인딩 중이며 이후에 작업이 실행 중임을 나타냅니다.

    이 문제를 해결하는 방법은 Page_Load에 데이터를로드하고 OnPreRender에 데이터를 바인딩하는 것입니다. 예를 들어

    : 우리는 여전히 대답하기에 충분한 정보가없는 것처럼

    private void Page_Load(object sender, System.EventArgs e) 
    { 
        grid.DataSource = whatever; 
    } 
    
    // your dropdown event occurs between these two events 
    
    protected override void OnPreRender(EventArgs e) 
    { 
        grid.DataBind(); 
    } 
    

    더 나은, ASP.NET의 ViewState를 이해 내가 여기에 읽고 있어요 무엇을 기반으로 http://msdn.microsoft.com/en-us/library/ms972976.aspx

    +0

    OnPrerender는 내가 필요한 감사의 트릭입니다! 흥미롭게도 databind는 데이터 소스의 SelectCommand를 변경하면 암시 적으로 나타납니다. 즉, OnPreRender에서 SelectCommand 속성을 설정하면 DataBind 메서드를 호출 할 필요가 없습니다. 그것은 어쨌든 그것을 실행합니다. 내가 한 일은 SelectCommand를 실행 (가정)하지 못하게하고 OnPreRender에서만 설정하여 새로운 데이터 세트로 채 웁니다. 짐 상당 DC – DeveloperChris

    0

    은 데이터 바인딩은이 정상적으로 경우에만 유사한

    또는 뭔가

    override void OnLoad(){ 
        if(this.IsPostBack == false){ 
         this.DataBind(); 
        } 
    } 
    
    뒤에 코드에서, 페이지의 초기 GET에서 수행되고, 그것이 Page.DataBind로 usally 호출되는 데이터를 overwirtes 당신의 다시 게시하면 데이터 바인딩이 필요하지 않습니다. 이것은 일반적으로 올바른 동작입니다.

    드롭 다운이 변경된 경우에만 표 형태를 다시 지정하려면 드롭 다운에 서버 측 onChange 이벤트 처리기를 추가하고 구체적으로 Gridview를 데이터 바인딩하십시오.

    void OnDropDownChange(EventArgs args){ 
        gridView.DataBind(); 
    } 
    

    데이터 바인딩에 대해 좀 더 자세히 읽으려는 것이 좋습니다. 이는 다른 접근 방식과 매우 다르며 매우 다릅니다. http://support.microsoft.com/kb/307860은 시작할 장소입니다.

    +0

    감사합니다. 도움이되었습니다. 이 경우에 나는 그것의 postback 경우에도 databind 싶어요. 문제의 포스트 백이 데이터 소스를 변경하기 때문입니다. 따라서 텍스트 상자는 변경되어야하며 컨트롤 상태를 유지하지 않아야합니다. – DeveloperChris

    관련 문제