다음을 통해 공유


웹 사이트의 세션 상태 유지 구성

이 부분에서는 단추 클릭 이벤트에 대해 세션 상태 유지를 구성하는 방법을 설명합니다.

단추 클릭 이벤트에서 웹 페이지가 다시 로드되면 CrystalReportViewer 개체 모델에 대한 변경 사항이 손실됩니다.

웹 사이트의 상태가 유지되지 않는지 확인하려면

  1. 빌드 메뉴에서 솔루션 빌드를 선택합니다.

  2. 빌드 오류가 발생하면 바로 수정합니다.

  3. 디버그 메뉴에서 시작을 클릭합니다.

  4. selectBackColorDropDownList에서 "Blue"를 선택합니다.

  5. 보고서 다시 표시를 클릭합니다.

    페이지가 다시 로드되고 파란색을 배경으로 도구 모음이 없는 보고서가 표시됩니다.

  6. 테두리 너비로 "10"을 입력합니다.

  7. 테두리 스타일로 "Double"을 선택합니다.

  8. 테두리 색상으로 "SteelBlue"를 선택합니다.

  9. 테두리그리기를 클릭합니다.

    페이지가 다시 로드되고 Crystal 보고서 가장자리에 테두리가 표시되지만 배경색은 파란색이 아닙니다.

  10. pageNumberTextBox에 "3"을 입력하고 페이지로 이동을 클릭합니다.

    페이지가 다시 로드되고 보고서의 3페이지가 표시되지만 보고서 가장자리에 테두리가 표시되지 않습니다.

  11. Visual Studio로 돌아간 다음 중지를 클릭하여 디버그 모드를 종료합니다.

drawBorder_Click() 이벤트 처리기에 Session 할당 코드를 추가하려면

웹 페이지를 다시 로드할 때 CrystalReportViewer 개체 모델 내에서 변경된 내용이 유지되도록 하려면 응용 프로그램에 상태 유지 코드를 추가해야 합니다.

먼저 테두리 값이 처음 할당되는 drawBorder_Click() 이벤트 처리기에 테두리 값의 상태 유지 코드를 추가합니다. 그런 다음 ConfigureCrystalReports() 메서드를 통해 Session에 저장된 값을 가져와 CrystalReportViewer 클래스의 각 속성에 할당합니다.

  • drawBorder_Click() 이벤트 처리기에서 기존 코드 다음에 BackColor, BorderColor, BorderStyle 및 BorderWidth에 대한 4개의 Session 할당 코드를 추가합니다.

    Session("myBorderColor") =
    myCrystalReportViewer.BorderColor.ToString()
    Session("myBorderStyle") = myCrystalReportViewer.BorderStyle
    Session("myBorderWidth") = myCrystalReportViewer.BorderWidth
    
    Session["borderColor"] =
    crystalReportViewer.BorderColor.ToString();
    Session["borderStyle"] = crystalReportViewer.BorderStyle;
    Session["borderWidth"] = crystalReportViewer.BorderWidth;
    

ConfigureCrystalReports() 메서드에 Session 검색 코드를 추가하려면

이제 ConfigureCrystalReports() 메서드를 통해 Session에서 값을 가져올 준비가 되었습니다.

  1. ConfigureCrystalReports() 메서드 맨 아래에 BackColor Session 변수가 null이 아닌지 검사하는 If 블록을 만듭니다.

    null이 아니면 If 블록에서 Session의 BackColor 속성을 가져와 문자열로 캐스팅합니다. 문자열을 Color 클래스의 FromName() 메서드에 전달한 다음 Color 인스턴스를 CrystalReportViewer 인스턴스의 BackColor 속성에 할당합니다.

    If Not IsNothing(Session("myBackColor")) Then
    myCrystalReportViewer.BackColor = Color.FromName(CType(Session("myBackColor"), String))
    End If
    
    if (Session["backColor"] != null)
    {
    crystalReportViewer.BackColor = Color.FromName((string)Session["backColor"]);
    }
    
  2. BorderColorSession 변수가 null이 아닌지 검사하는 두 번째 If 블록을 만듭니다. null이 아니면 If 블록에서 Session의 BorderColor 속성을 가져와 문자열로 캐스팅합니다. 문자열을 Color 클래스의 FromName() 메서드에 전달한 다음 Color 인스턴스를 CrystalReportViewer 인스턴스의 BorderColor 속성에 할당합니다.

    If Not IsNothing(Session("myBorderColor")) Then
    myCrystalReportViewer.BorderColor = Color.FromName(CType(Session("myBorderColor"), String))
    End If
    
    if (Session["borderColor"] != null)
    {
    crystalReportViewer.BorderColor = Color.FromName((string)Session["borderColor"]);
    }
    
  3. BorderStyleSession 변수가 null이 아닌지 검사하는 세 번째 If 블록을 만듭니다. null이 아니면 If 블록에서 Session의 BorderStyle속성을 가져와 BorderStyle로 캐스팅합니다.

    myCrystalReportViewer.BorderStyle = CType(Session("myBorderStyle"), BorderStyle)
    
    if (Session["borderStyle"] != null)
    {
    crystalReportViewer.BorderStyle = (BorderStyle)Session["borderStyle"];
    }
    
  4. BorderWidth Session 변수가 null이 아닌지 검사하는 네 번째 If 블록을 만듭니다. null이 아니면 If 블록에서 Session의 BorderWidth 속성을 가져와 정수로 변환합니다.

    myCrystalReportViewer.BorderWidth = Convert.ToInt32(Session("myBorderWidth"))
    
    if (Session["borderStyle"] != null)
    {
    crystalReportViewer.BorderWidth = Convert.ToInt32(Session["borderStyle"]);
    }
    

drawBorder Button 컨트롤을 코딩하려면

다음 절차에서는 redisplay Button 클릭 이벤트 처리기에 Session 상태 유지 코드를 추가합니다.

  1. redisplay_Click() 이벤트 처리기 내에서 selectBackColor DropDownList의 선택 항목을 Session에 할당합니다.

    Session("myBackColor") = selectBackColor.SelectedItem.Text
    
    Session["backColor"] = selectBackColor.SelectedItem.Text;
    
  2. drawBorder_Click() 이벤트 처리기 내에서 borderWidth TextBox의 Text 속성을 Session에 할당합니다.

    Session("myBorderWidth") = borderWidth.Text
    
    Session["borderWidth"] = borderWidth.Text;
    
  3. selectBorderStyleDropDownList에서 선택한 인덱스를 Session에 할당합니다.

    Session("myBorderStyle") = selectBorderStyle.SelectedIndex
    
    Session["borderStyle"] = selectBorderStyle.SelectedIndex;
    
  4. selectBorderColorDropDownList에서 선택한 항목을 Session에 할당합니다.

    Session("myBorderColor") = selectBorderColor.SelectedItem.Text
    
    Session["borderColor"] = selectBorderColor.SelectedItem.Text;
    

이제 프로젝트를 빌드하고 실행하여 보고서에 대한 변경 사항이 단추 클릭 이벤트 전후에 유지되는지 확인할 수 있습니다.