! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

Blazor UI 컨트롤을 웹 응용 프로그램에 추가하는 방법 > 온라인 스터디

본문 바로가기

ComponentOne

온라인 스터디

Blazor Blazor UI 컨트롤을 웹 응용 프로그램에 추가하는 방법

페이지 정보

작성자 GrapeCity 작성일 2022-07-29 11:40 조회 883회 댓글 0건

본문

BlazorJavaScript 대신 C#을 사용하는 서식 있는 대화형 클라이언트 측 웹 UI를 빌드하여 .NET에 작성한 서버 측 및 클라이언트 측 앱 로직을 공유하는 프레임워크입니다. Blazor에는 Docker와 같은 최신 호스팅 플랫폼과의 통합 및 하이브리드 데스크톱과 모바일 앱 빌드가 포함한 수많은 이점이 있습니다.

이 블로그 게시물에서는 Visual Studio 2022.NET 6 framework로 새로운 Blazor Server 응용 프로그램을 만드는 방법을 안내해 드리겠습니다. 기본 응용 프로그램을 구성한 후에는 Blazor 응용 프로그램에서 Blazor 컴포넌트를 만들고 사용한 다음 적절한 NuGet 패키지를 설치하여 타사 Blazor 컨트롤을 추가하고 작동하는 방법에 대해 알아보겠습니다.

Blazor WebAssembly 응용 프로그램과의 작동에 대해서는 추후 별도로 다루도록 하겠습니다.

이제 Blazor Server 응용 프로그램 만들기를 시작해 보겠습니다.


Blazor 응용 프로그램 만들기

이 섹션에 설명된 단계에는 Visual Studio 2022가 필요하며 .NET 6 framework를 사용하여 응용 프로그램을 만들겠습니다. 따라서 이러한 단계를 원활하게 따라가려면 Visual Studio 2022로 작업해야 합니다.

1. Visual Studio를 열고 새 프로젝트 만들기를 선택합니다.

검색 상자에 'Blazor'를 입력하여 표시된 프로젝트 템플릿을 최소화합니다. 아래 스크린샷에 나와 있는 것처럼 Blazor 검색은 C# 언어용 Blazor Server 앱Blazor WebAssembly 앱을 포함한 Blazor 응용 프로그램 템플릿을 나열합니다. Blazor Server 앱 변형을 선택하여 Blazor 응용 프로그램을 만들어 보겠습니다.

Blazor 서버 앱


2. 프로젝트 만들기는 프로젝트 이름 및 위치와 같은 기본 세부 정보를 제공하는 프로젝트 구성을 따릅니다. 프로젝트 구성의 마지막 단계에서 원하는 .NET framework를 선택하도록 아래 화면이 표시됩니다. 여기에서는 응용 프로그램을 만들도록 .NET 6 framework를 선택하고 다른 모든 옵션을 기본값으로 유지합니다. 응용 프로그램 요구 사항을 기반으로 동일한 항목을 변경할 수 있습니다.

.NET 6 Framework


3. 프로젝트가 만들어지고 구성되면 기본적으로 카운터의 기본 기능을 제공하는 Counter와 가져온 데이터를 테이블로 표시하는 FetchData라는 두 개의 Blazor 컴포넌트가 포함됩니다. 아래 GIF는 응용 프로그램이 실행된 후 이러한 컴포넌트를 설명합니다.

Counter 및 Fetch Data


이 섹션에서는 Blazor 컴포넌트와 이를 만들고 사용하는 방법을 이해할 수 있도록 돕습니다.


Blazor 컴포넌트 만들기 및 추가


Blazor 컴포넌트Razor 구문을 사용하여 .razor 파일에 일반적으로 정의된 UI의 자체적으로 포함된 부분입니다. UI 이벤트 처리기를 정의하고, 입력 데이터에 바인딩하고, 상태 및 렌더링 로직을 유지합니다. Blazor는 컴포넌트를 통해 UI 캡슐화를 지원합니다.

앞의 단계는 Blazor 응용 프로그램이 위에 정의된 단계를 사용하여 이미 만들어지고 구성되었다는 가정하에 Blazor 컴포넌트를 만들고 사용하는 방법을 이해할 수 있도록 돕습니다.


1단계: EmployeeCard 컴포넌트 만들기

Blazor 컴포넌트를 만들어 조직의 직원에 대한 세부 정보를 표시해 보겠습니다. 컴포넌트를 프로젝트에 추가하려면 페이지 폴더에서 마우스 오른쪽 버튼을 클릭하고 추가 → Razor 컴포넌트를 선택합니다. 새 항목 추가 대화 상자에서 이름을 EmployeeCard로 설정하고 아래 이미지에 나온 것처럼 추가를 클릭합니다.

Razor 컴포넌트


EmployeeCard 컴포넌트는 기본적으로 다음 코드를 사용하여 코드 파일을 생성합니다.

EmployeeCard 컴포넌트


생성된 코드에는 두 개의 파트가 있습니다. Blazor 컴포넌트의 위쪽 파트는 HTML 템플릿을 나타냅니다. 컴포넌트의 <div> 이름이 있는 단일 태그는 이 경우 템플릿을 나타냅니다. Blazor 컴포넌트의 아래쪽 파트에는 Blazor 컴포넌트의 C# 코드를 줄바꿈하는 @code 지시문이 있습니다.

EmployeeCard 컴포넌트의 생성을 완료하기 위해 컴포넌트의 HTML 템플릿을 정의하여 구성된 방식으로 직원 세부 정보를 표시해 보겠습니다. Blazor 서버 앱에는 기본적으로 Bootstrap이 포함되어 있으므로 Bootstrap 카드와 다른 HTML 태그 즉, img, H5, H6 등을 사용하여 컴포넌트를 정의하겠습니다. 아래 마크업은 EmployeeCard 컴포넌트 템플릿을 정의합니다.


<div class="card m-2">
    <div class="card-body">
        <div class="card-text text-center">
            <img class="card-img-top" src="@ThumbnailUrl" alt="Card image cap">
            <p></p>
            <h5>@Name</h5>
        </div>
        <div>
            <h6 class="card-text"><b>Name</b>  : <small>John Maer</small></h6>
            <h6 class="card-text"><b>Title</b>: <small>Assistant Manager</small> </h6>
            <h6 class="card-text"><b>HireDate</b>: <small>3/24/2015</small></h6>
        </div>
    </div>
</div>


위의 코드에서 하드 코딩된 값은 정적으로 만들도록 Blazor 컴포넌트에 할당되어 있습니다. 하지만 한 번 정의되면 컴포넌트는 동일한 응용 프로그램 내에서 또는 여러 응용 프로그램에서 여러 번 재사용할 수 있습니다. 따라서 값은 동적으로 전달해야 합니다. 앞서 이렇게 하는 방법에 대해 알아보겠습니다.


2단계: Blazor 컴포넌트를 재사용하도록 매개 변수 정의

매개 변수는 템플릿의 @code 섹션에서 C# 코드를 사용하여 변수로 정의됩니다. 아래 코드에 나와 있는 것처럼 @ symbol을 사용하여 HTML 요소에 전달됩니다. 이러한 매개 변수는 컴포넌트를 사용하고 데이터에 바인딩하는 경우 전달되는 실제 값의 자리 표시자입니다.

@code {
 
    [Parameter]
    public string Name { get; set; }
 
    [Parameter]
    public string Title { get; set; }
 
    [Parameter]
    public string ThumbnailUrl { get; set; }
 
    [Parameter]
    public DateTime HireDate { get; set; }
 
}


마지막으로 전체 EmployeeCard 컴포넌트는 아래 이미지에 설명된 대로 나타납니다.

EmployeeCard 코드


3단계: 직원 세부 정보 가져오기 및 표시

템플릿이 이제 직원 세부 정보를 표시할 준비가 되었습니다. 컴포넌트를 새 razor 컴포넌트에 추가하거나 경로 지시문을 컴포넌트 자체에 추가하여 EmpoyeeCard 컴포넌트를 사용할 수 있습니다. 이 경우에는 페이지 폴더를 마우스 오른쪽 버튼으로 클릭하고 추가 → Razor 컴포넌트를 선택하여 새 Razor 컴포넌트를 추가합니다. 새 컴포넌트의 이름을 EmployeeCardDemo로 설정하고 경로 특성을 추가하여 이 페이지로 이동하고 작동 중인 EmployeeCard 컴포넌트를 봅니다.

컴포넌트의 이름이 있는 HTML 태그를 사용하여 다른 컴포넌트 내에서 Blazor 컴포넌트를 추가할 수 있습니다. 이 경우에는 <EmployeeCard></EmployeeCard>를 사용하여 EmployeeCardDemo Blazor 컴포넌트 내에 Blazor 컴포넌트를 배치할 수 있습니다.

다음으로 컴포넌트 템플릿에는 하드 코딩된 값이 없습니다. 대신 실제 값에 자리 표시자로 매개 변수를 사용했으므로 템플릿을 사용하면 페이지에 빈 컴포넌트가 생성됩니다. 컴포넌트를 사용하여 직원 세부 정보를 표시하는 경우 값을 매개 변수에 할당해야 합니다. 이렇게 하기 위해 XML 파일에서 데이터를 가져와 직원 세부 정보 목록을 만들겠습니다. 그런 다음 각 직원에 대한 컴포넌트를 만들고 목록에서 직원 세부 정보를 할당하여 각 직원의 세부 정보를 표시하겠습니다.

아래 코드는 새 Razor 컴포넌트(EmployeeCardDemo.razor)에 경로 특성을 추가하고 XML 데이터를 가져와 직원 세부 정보 목록을 만들고 각 직원의 세부 정보를 표시하기 위해 여러 컴포넌트를 만드는 방법에 대해 보여 줍니다.

@page "/employeecarddemo"
 
<div class="container">
    <div class="row">
        @foreach (var employee in employeeList)
        {
            <div class="col-lg-4 mb-2">
                <EmployeeCard ThumbnailUrl=@employee.ThumbnailUrl Name=@employee.Name Title=@employee.Title HireDate=@employee.HireDate></EmployeeCard>
            </div>
        }
    </div>
</div>
 
@code {
    private List<Employee> employeeList;
 
    protected override async Task OnInitializedAsync()
    {
        XmlRepository repository = new XmlRepository();
        employeeList = repository.GetEmployees();
    }
}

아래 코드 스니펫은 XML 파일에서 데이터를 가져오는 데 사용된 XmlRepository 클래스의 구현을 나타냅니다.

public class XmlRepository
{
    private static List<Employee> _employeeList = new List<Employee>();
    private static List<Department> _departmentList = new List<Department>();
 
    public XmlRepository()
    {
        var assembly = typeof(XmlRepository).GetTypeInfo().Assembly;
 
        //TODO: add culture
        var stream = assembly.GetManifestResourceStream("BlazorDemo.Data.employees.xml");
 
        using (var reader = new System.IO.StreamReader(stream))
        {
            var serializer = new XmlSerializer(typeof(List<Employee>));
            _employeeList = (List<Employee>)serializer.Deserialize(reader);
        }
 
        var dstream = assembly.GetManifestResourceStream("BlazorDemo.Data.departments.xml");
 
        using (var reader = new System.IO.StreamReader(dstream))
        {
            var serializer = new XmlSerializer(typeof(List<Department>));
            _departmentList = (List<Department>)serializer.Deserialize(reader);
        }
    }
 
    public List<Employee> GetEmployees()
    {
        return _employeeList;
    }
 
    public List<Department> GetDepartments()
    {
        return _departmentList;
    }
 
    public Department GetDepartment(int index)
    {
        int realIndex = index - 1;
        if (_departmentList.Count > 0 && _departmentList.Count > realIndex)
            return _departmentList[realIndex];
        else
            return null;
    }
}
 
public class Employee
{
    public string Name { get; set; }
    public string Title { get; set; }
    public DateTime HireDate { get; set; }
    public double Status { get; set; }
    public string ThumbnailImage { get; set; }
    public string ThumbnailUrl
    {
        get
        {
            return "Employees/" + ThumbnailImage;
        }
    }
    public int DepartmentId { get; set; }
    public bool FullTime { get; set; }
}
 
public class Department
{
    public int Id { get; set; }
    public string Name { get; set; }
}

마지막으로 Razor 컴포넌트 경로를 NavMenu.razor(공유 → NavMenu.razor) 파일에 추가해 보겠습니다.

<div class="nav-item px-3">
    <NavLink class="nav-link" href="employeecarddemo">
        <span class="oi oi-list-rich" aria-hidden="true"></span> Employee Card Demo
    </NavLink>
</div>


4단계: 응용 프로그램을 실행하여 결과 관찰

응용 프로그램을 실행하고 Employee Card Demo로 이동하여 아래 GIF에 보이는 대로 결과를 관찰합니다.

img

위의 데모에서 사용된 이미지는 프로젝트의 폴더에 배치되며 경로는 해당 위치에서 이미지를 가져오도록 XML 파일에 지정되어 있습니다.

이로써 처음부터 Blazor 컴포넌트의 생성과 사용을 마무리하겠습니다. 다음으로는 ComponentOne Blazor Edition 컨트롤을 고려하여 상용 Blazor 컨트롤을 사용하는 방법을 파악해 보도록 하겠습니다.


NuGet에서 Blazor 컨트롤 추가

처음부터 Blazor 컴포넌트를 만들고 사용하는 방법을 이해하고 난 후에는 이제 상용 Blazor 컨트롤과의 작동 방법에 대해 알아보겠습니다. 이는 복잡한 요구 사항이 있는 풍부한 기능의 데스크탑 응용 프로그램을 만드는 경우에 필요할 수 있습니다.

상용 컨트롤로 작동하려면 프로젝트에서 사용할 수 있는 이러한 컨트롤이 있어야 합니다. 메뉴 막대에서 도구 옵션을 통해 응용 프로그램의 NuGet 패키지 관리자에 액세스하면 됩니다. NuGet 패키지 관리자 메뉴에서 솔루션용 NuGet 패키지 관리를 선택하면 아래 스크린샷에 나타난 대로 패키지 관리 창이 열립니다. 특정 패키지를 로드하려면 찾아보기 탭에서 볼 수 있는 검색 패널에 패키지 이름을 입력하면 됩니다. 왼쪽 패널에서 적절한 패키지를 선택하면 창의 오른쪽 패널에서 사용 가능한 설치 옵션을 사용하여 프로젝트에 설치할 수 있습니다.

이 블로그에서는 ComponentOne Blazor 컨트롤로 작업하겠습니다. 직원 세부 정보를 표시하는 데 사용한 EmployeeCard 컴포넌트와 비교하여 카드 형식 대신 표 형식으로 직원 세부 정보를 표시하도록 ComponentOne Blazor EditionFlexGrid를 보여 드리겠습니다.

아래 스크린샷은 C1.Blazor.Grid Nuget 패키지의 설치를 보여 줍니다.

C1.Blazor.Grid 설치

Nuget 패키지를 설치하고 나면 솔루션 탐색기 창의 의존성 → 패키지 노드 아래에 나타나기 시작하며 패키지에서 제공한 모든 API 멤버는 컴포넌트 생성 시 사용할 수 있게 됩니다.


ComponentOne FlexGrid를 사용하여 작업하기

이 섹션에서는 Blazor 응용 프로그램에서 FlexGrid 컨트롤을 사용하여 작업하는 방법에 대해 간략히 설명합니다. 자세한 내용은 FlexGrid 빠른 시작을 참조할 수 있습니다.

Blazor FlexGrid 컨트롤에서 필요로 하는 클라이언트 측 소스를 등록하는 것으로 시작할 것이며 이는 FlexGrid 컨트롤을 사용한 작업에 도움을 줍니다. 다음 참조를 페이지에 추가 → 다음 태그 아래 _Layout.cshtml <head> 파일:

<link rel="stylesheet" href="~/_content/C1.Blazor.Core/styles.css" />
<link rel="stylesheet" href="~/_content/C1.Blazor.Grid/styles.css" />
<link rel="stylesheet" href="~/_content/C1.Blazor.ListView/styles.css" />
<link rel="stylesheet" href="~/_content/C1.Blazor.Input/styles.css" />
<link rel="stylesheet" href="~/_content/C1.Blazor.DataPager/styles.css" />
<link rel="stylesheet" href="~/_content/C1.Blazor.Calendar/styles.css" />
<link rel="stylesheet" href="~/_content/C1.Blazor.DateTimeEditors/styles.css" />
<link rel="stylesheet" href="~/_content/C1.Blazor.Chart/styles.css" />
 
<script src="~/_content/C1.Blazor.Core/scripts.js"></script>
<script src="~/_content/C1.Blazor.Input/scripts.js"></script>
<script src="~/_content/C1.Blazor.Grid/scripts.js"></script>
<script src="~/_content/C1.Blazor.Chart/scripts.js"></script>
<script src="~/_content/C1.Blazor.Calendar/scripts.js"></script>

다음으로 새 Razor 컴포넌트를 FlexGridDemo라는 프로젝트에 추가하여 아래와 같이 FlexGrid 컨트롤을 표시합니다.

Razor 컴포넌트 추가

EmployeeCard 컴포넌트에 대해 설명된 동일한 디자인 접근 방식을 따라 FlexGridDemo Razor 컴포넌트에 FlexGrid 컨트롤을 추가하겠습니다. <FlexGrid></FlexGrid>FlexGridDemo Blazor 컴포넌트 내에 FlexGrid 컴포넌트를 배치하는 데 사용됩니다.

또한 EmployeeCard 컴포넌트에 바인딩하는 경우 사용된 동일한 데이터 소스에 FlexGrid를 바인딩합니다. 유일한 차이점은 C1DataCollection 인스턴스를 만들어 직원 목록 데이터로 채워 C1DataCollection과 FlexGrid를 바인딩한다는 것입니다.

아래 코드는 새 Razor 컴포넌트(FlexGridDemo.razor)에 경로 특성을 추가하고 XML 데이터를 가져와 직원 세부 정보 컬렉션을 만들고, 표 형식으로 직원 세부 정보를 표시하기 위해 FlexGrid 컨트롤을 만드는 방법을 보여 줍니다. FlexGrid의 SelectionMode 속성이 GridSelectionMode.RowRange로 설정되었으므로 FlexGrid의 SelectionChanged 이벤트도 바인딩하여 선택한 행의 총수를 표시합니다.

@page "/flexgriddemo"
 
@using C1.Blazor.Core
@using C1.Blazor.Grid
@using C1.DataCollection
 
 
<FlexGrid ItemsSource="employeeDataCollection"
          AutoGenerateColumns="false"
          GridLinesVisibility="GridLinesVisibility.Horizontal"
          DefaultRowHeight="100"
          Style="@("max-height:50vh")"
          ColumnHeaderStyle="@("background-color:#b71c1c;color:#fff;font-size:16px")"
          SelectionStyle="@("background-color:#ef9a9a")"
          GroupRowStyle="@("background-color:#e53935;color:#fff")"
          AlternatingRowStyle="@("background-color:#ffebee")"
          CellStyle="@("align-items:center;padding:8px;")"
          IsVirtualizationEnabled="false"
          SelectionMode="GridSelectionMode.RowRange"
          SelectionChanged="OnSelectionChanged">
    <FlexGridColumns>
        <GridImageColumn Binding="ThumbnailUrl" Header="Employee Image" ClipPath="circle(50%)" AllowSorting="false" Width="200" />
        <GridColumn Binding="Name" Width="200"/>
        <GridColumn Binding="Title" WordWrap="true" Width="200"/>
        <GridDateTimeColumn Binding="HireDate" Format="d" Mode="GridDateTimeColumnMode.Date" Width="200"/>       
    </FlexGridColumns>
</FlexGrid>
 
@code {
    private C1DataCollection<Employee> employeeDataCollection;
 
    protected override async Task OnInitializedAsync()
    {
        XmlRepository repository = new XmlRepository();
        var employeeList = repository.GetEmployees();
        employeeDataCollection = new C1DataCollection<Employee>(employeeList);
    }
 
    public async void OnSelectionChanged(object sender, GridCellRangeEventArgs e)
    {
        if (e.CellRange != null)
        {
            int rowsSelected = Math.Abs(e.CellRange.Row2 - e.CellRange.Row) + 1;
            await JsRuntime.InvokeVoidAsync("alert", "Number of rows selected:" + rowsSelected.ToString());
        }
    }
}

마지막으로 FlexGridDemo Razor 컴포넌트 경로를 NavMenu.razor(공유 → NavMenu.razor) 파일에 추가해 보겠습니다.

<div class="nav-item px-3">
   <NavLink class="nav-link" href="flexgriddemo">
       <span class="oi oi-list-rich" aria-hidden="true"></span> FlexGrid
   </NavLink>
</div>


응용 프로그램을 실행하고 FlexGrid로 이동하여 아래 GIF에 보이는 대로 결과를 관찰합니다.

응용 프로그램 실행


위의 GIF는 처음부터 컴포넌트 빌드가 아닌 ComponentOne Blazor Edition 컨트롤 사용의 많은 이점에 대해 설명합니다. 그리드의 스타일을 설정하고 이미지 경로를 열에 바인딩하여 이미지를 표시하는 등의 작업이 얼마나 쉬운지 확인할 수 있습니다. 위에 설명된 기능 이외에 추가 기능을 구현하여 FlexGrid를 향상하는 방법을 안내하는 다음 데모를 참조할 수 있습니다.

또한 ComponentOne Blazor Edition의 흥미로운 이점 중 하나는 사용자가 API 멤버를 기억할 필요가 없는 클라이언트 측 IntelliSense 기능입니다. 아래 GIF는 클라이언트 측 IntelliSense의 사용 방법을 보여 줍니다.

클라이언트 측 IntelliSense


여기에서 EmployeeCard 및 FlexGrid Blazor 컴포넌트를 구현하는 샘플을 다운로드할 수 있습니다.

이 블로그에서 보여 드린 기본 기능 외에도 FlexGrid는 기능이 풍부한 컨트롤이며 그룹화, 행 세부 정보 템플릿, 고정, 내보내기 등을 비롯한 많은 기능을 제공합니다. FlexGrid 데모문서를 참조하여 사용 가능한 모든 기능을 살펴볼 수 있습니다.

ComponentOne Blazor Edition에서 제공하는 다른 컨트롤을 살펴보려면 Blazor Server ExplorerBlazor Control Explorer 데모를 참조할 수 있습니다.




지금 바로 ComponentOne을 다운로드하여 직접 테스트해보세요!

 
  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그1

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.