BalzorDataSheet 는 기본적으로 대문자와 소문자 입력을 모두 허용합니다.
하지만 대문자만, 소문자만 입력이 가능하게 하고 싶을 때가 있는데 이번 글에서는 BlazorDatasheet 소스를 직접 수정하여
입력 값을 대문자 / 소문자 / 제한 없음으로 제어하는 방법을 정리해봅니다.
이번 작업은 라이브러리 확장이 아닌 소스 직접 수정 방식입니다.
https://github.com/anmcgrath/BlazorDatasheet
GitHub - anmcgrath/BlazorDatasheet: Simple excel-like datasheet Blazor component
Simple excel-like datasheet Blazor component. Contribute to anmcgrath/BlazorDatasheet development by creating an account on GitHub.
github.com
먼저 대문자, 소문자, 대소문자를 구분하는 enum 을 추가합니다.
BlazorDatasheet 프로젝트의 KeyboardInput 에 추가했습니다.
TextCase.cs
namespace BlazorDatasheet.KeyboardInput
{
public enum TextCase
{
None,
Upper,
Lower
}
}
Datasheet 에 TextCase parameter 를 정의합니다.
Datasheet.razor.cs
[Parameter]
public TextCase TextCase { get; set; } = TextCase.None;
Datasheet.razor 파일에서 TextCase 를 EditLayer 에 전달합니다.
Datasheet.razor
<EditorLayer Disabled="@IsReadOnly" @ref="_editorLayer" CustomCellTypes="@CustomCellTypeDefinitions" TextCase="@TextCase" />
Edit 폴더의 EditorLayer 에 전달 받은 TextCase 를 처리하기위해 parameter 로 정의하고 GetDynamicEditorParameters() 메서드에서 TextCase 를 추가합니다.
EditorLayer.razor
[Parameter]
public TextCase TextCase { get; set; } = TextCase.None;
private IDictionary<string, object> GetDynamicEditorParameters()
{
var editCell = _sheet.Editor.EditCell!;
var merge = _sheet.Cells.GetMerge(editCell.Row, editCell.Col);
var r = merge?.Right ?? editCell.Col;
var b = merge?.Bottom ?? editCell.Row;
var cellWidth = _sheet.Columns.GetVisualWidthBetween(editCell.Col, r + 1);
var cellHeight = _sheet.Rows.GetVisualHeightBetween(editCell.Row, b + 1);
return new Dictionary<string, object>()
{
{ nameof(BaseEditor.OnValueChanged), EventCallback.Factory.Create<string>(this, HandleEditValueChanged) },
{ "Style", GetEditorDisplayStyling() },
{ "CellWidth", cellWidth },
{ "CellHeight", cellHeight },
{ "TextCase", TextCase } // 추가
};
}
Edit 폴더> DefaultComponents폴더의 TextEditorComponent.cs 에서 TextCase 를 정의하고 사용자 입력에 따라 TextCase 에 따른 처리를 합니다.
ApplyTextCase 메서드를 정의하여 TextCase 에 따라 대소문자를 반환하고 HandleEditValueChange, OnInput 에서 사용하면 됩니다. 추가한 부분은 아래와 같습니다.
TextEditorComponent.razor
[Parameter]
public TextCase TextCase { get; set; } = TextCase.None;
private string ApplyTextCase(string? s)
{
if (string.IsNullOrEmpty(s))
return s ?? string.Empty;
return TextCase switch
{
TextCase.Upper => s!.ToUpper(CultureInfo.CurrentCulture),
TextCase.Lower => s!.ToLower(CultureInfo.CurrentCulture),
_ => s!
};
}
public override void HandleEditValueChange(string? s)
{
var newValue = ApplyTextCase(s);
base.HandleEditValueChange(newValue);
}
private void OnInput(string value)
{
var newValue = ApplyTextCase(value);
CurrentValue = newValue;
HandleInputChanged();
SuggestFunctions();
}
Home 화면에 테스트 코드를 추가하고 확인한 결과는 아래와 같습니다.
정상적으로 동작하는 것을 확인할 수 있습니다.

| Blazor 메뉴 그룹 관리하기 (0) | 2025.12.28 |
|---|---|
| Blazor 인쇄 막는 방법 (0) | 2025.12.17 |
| MudSelectExtended 로 가상화 처리하기 (0) | 2025.12.09 |
| MudBlazor 의 Mask 속성 이용한 입력 문자 제한하기 (0) | 2025.12.09 |
| MudBlazor 의 MudTextField 소문자를 대문자로 변경하기 (0) | 2025.12.09 |