Please note that this control has been deprecated and replaced with the Grid component, and as such, we recommend migrating to that control. This will not be receiving any new features, bug fixes will be deprioritized. For help or questions on migrating your codebase to the Data Grid, please contact support.
Blazor 그리드 편집
Ignite UI for Blazor 일괄 업데이트로 셀 및 행 편집을 지원합니다. 참고로, 이는 현재 템플릿이 없는 열로 제한됩니다.
using System;
using System.Net.Http;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using IgniteUI.Blazor.Controls; // for registering Ignite UI modulesnamespaceInfragistics.Samples
{
publicclassProgram
{
publicstaticasync Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
// registering Ignite UI modules
builder.Services.AddIgniteUIBlazor(
typeof(IgbDataGridModule),
typeof(IgbGridColumnOptionsModule)
);
await builder.Build().RunAsync();
}
}
}cs
// NOTE this file contains multiple data sources:// Data Source #1
using System;
using System.Collections.Generic;
using System.Linq;
namespaceInfragistics.Samples
{
publicstaticclassDataGenerator
{
readonlystaticstring[] websites = { ".com", ".gov", ".edu", ".org" };
readonlystaticstring[] emails = { "gmail.com", "yahoo.com", "twitter.com" };
readonlystaticstring[] genders = { "male", "female" };
readonlystaticstring[] maleNames = { "Kyle", "Oscar", "Ralph", "Mike", "Bill", "Frank", "Howard", "Jack", "Larry", "Pete", "Steve", "Vince", "Mark", "Alex", "Max", "Brian", "Chris", "Andrew", "Martin", "Mike", "Steve", "Glenn", "Bruce" };
readonlystaticstring[] femaleNames = { "Gina", "Irene", "Katie", "Brenda", "Casey", "Fiona", "Holly", "Kate", "Liz", "Pamela", "Nelly", "Marisa", "Monica", "Anna", "Jessica", "Sofia", "Isabella", "Margo", "Jane", "Audrey", "Sally", "Melanie", "Greta", "Aurora", "Sally" };
readonlystaticstring[] lastNames = { "Adams", "Crowley", "Ellis", "Martinez", "Irvine", "Maxwell", "Clark", "Owens", "Rooney", "Lincoln", "Thomas", "Spacey", "MOrgan", "King", "Newton", "Fitzgerald", "Holmes", "Jefferson", "Landry", "Berry", "Perez", "Spencer", "Starr", "Carter", "Edwards", "Stark", "Johnson", "Fitz", "Chief", "Blanc", "Perry", "Stone", "Williams", "Lane", "Jobs", "Adams", "Power", "Tesla" };
readonlystaticstring[] countries = { "USA", "UK", "France", "Canada", "Poland" };
readonlystaticstring[] citiesUS = { "New York", "Los Angeles", "Miami", "San Francisco", "San Diego", "Las Vegas" };
readonlystaticstring[] citiesUK = { "London", "Liverpool", "Manchester" };
readonlystaticstring[] citiesFR = { "Paris", "Marseille", "Lyon" };
readonlystaticstring[] citiesCA = { "Toronto", "Vancouver", "Montreal" };
readonlystaticstring[] citiesPL = { "Krakow", "Warsaw", "Wroclaw", "Gdansk" };
readonlystaticstring[] citiesJP = { "Tokyo", "Osaka", "Kyoto", "Yokohama" };
readonlystaticstring[] citiesGR = { "Berlin", "Bonn", "Cologne", "Munich", "Hamburg" };
readonlystaticstring[] roadSuffixes = { "Road", "Street", "Way" };
readonlystaticstring[] roadNames = { "Main", "Garden", "Broad", "Oak", "Cedar", "Park", "Pine", "Elm", "Market", "Hill" };
publicstatic Random Rand = new Random();
publicstaticstringGetWebsite()
{
return GetItem(websites);
}
publicstaticstringGetEmail()
{
return GetItem(emails);
}
publicstaticdoubleGetNumber(double min, double max)
{
return Math.Round(min + (Rand.NextDouble() * (max - min)));
}
publicstaticintGetInteger(double min, double max)
{
return (int)GetNumber(min, max);
}
publicstaticstringGetPhone()
{
var phoneCode = GetNumber(100, 900);
var phoneNum1 = GetNumber(100, 900);
var phoneNum2 = GetNumber(1000, 9000);
var phone = phoneCode + "-" + phoneNum1 + "-" + phoneNum2;
return phone;
}
publicstaticstringGetGender()
{
return GetItem(genders);
}
publicstaticstringGetNameFirst(string gender)
{
if (gender == "male")
return GetItem(maleNames);
elsereturn GetItem(femaleNames);
}
publicstaticstringGetNameLast()
{
return GetItem(lastNames);
}
publicstaticstringGetItem(string[] array)
{
var index = (int)Math.Round(GetNumber(0, array.Length - 1));
return array[index];
}
publicstaticstringGetCountry()
{
return GetItem(countries);
}
publicstaticstringGetCity(string country)
{
if (country == "Canada")
{
return GetItem(citiesCA);
}
elseif (country == "France")
{
return GetItem(citiesFR);
}
elseif (country == "Poland")
{
return GetItem(citiesPL);
}
elseif (country == "USA")
{
return GetItem(citiesUS);
}
elseif (country == "Japan")
{
return GetItem(citiesJP);
}
elseif (country == "Germany")
{
return GetItem(citiesGR);
}
else
{ // if (country === "United Kingdom") {return GetItem(citiesUK);
}
}
publicstaticstringGetStreet()
{
var num = Math.Round(GetNumber(100, 300)).ToString();
var road = GetItem(roadNames);
var suffix = GetItem(roadSuffixes);
return num + " " + road + " " + suffix;
}
publicstatic DateTime GetBirthday()
{
var year = DateTime.Now.Year - GetInteger(30, 50);
var month = GetNumber(10, 12);
var day = GetNumber(20, 27);
returnnew DateTime(year, (int)month, (int)day);
}
publicstatic DateTime GetDate()
{
var year = DateTime.Now.Year;
var month = GetNumber(10, 12);
var day = GetNumber(20, 27);
returnnew DateTime(year, (int)month, (int)day);
}
publicstaticstringPad(int num, int size)
{
var s = num + "";
while (s.Length < size)
{
s = "0" + s;
}
return s;
}
publicstaticstringGetPhotoMale(int id)
{
return"https://static.infragistics.com/xplatform/images/people/GUY" + Pad(id, 2) + ".png";
}
publicstaticstringGetPhotoFemale(int id)
{
return"https://static.infragistics.com/xplatform/images/people/GIRL" + Pad(id, 2) + ".png";
}
privatestaticint maleCount = 0;
privatestaticint femaleCount = 0;
publicstaticstringGetPhoto(string gender)
{
if (gender == "male")
{
maleCount++;
if (maleCount > 24) maleCount = 1;
return GetPhotoMale(maleCount);
}
else
{
femaleCount++;
if (femaleCount > 24) femaleCount = 1;
return GetPhotoFemale(femaleCount);
}
}
publicstaticstringGetGenderPhoto(string gender)
{
return"https://static.infragistics.com/xplatform/images/genders/" + gender + ".png";
}
publicstaticstringGetCountryFlag(string country)
{
return"https://static.infragistics.com/xplatform/images/flags/" + country + ".png";
}
publicstaticstringGetIncomeRange(double salary)
{
if (salary < 50000)
{
return"Low";
}
elseif (salary < 100000)
{
return"Average";
}
else
{
return"High";
}
}
}
}
// Data Source #2
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
namespaceInfragistics.Samples
{
publicclassObsEmployeeInfo : INotifyPropertyChanged
{
publicstring ID { get; set; }
publicstring Address { get; set; }
publicdouble Age { get; set; }
publicstring Gender { get; set; }
publicstring FirstName { get; set; }
publicstring LastName { get; set; }
publicstring Name { get; set; }
publicstring Street { get; set; }
publicstring City { get; set; }
publicstring Email { get; set; }
publicstring Phone { get; set; }
publicstring Photo { get; set; }
publicdouble Salary { get; set; }
publicdouble Sales { get; set; }
publicstring Income { get; set; }
publicint Index { get; set; }
public DateTime Birthday { get; set; }
public ObservableCollection<ObsEmployeeProductivity> Productivity { get; set; }
privatestring _Country;
publicstring Country
{
get { return _Country; }
set { if (_Country != value) { OnCountryChanged(value); } }
}
publicstring CountryFlag { get; set; }
protectedvoidOnCountryChanged(string countryName)
{
// syncronizing country name and country flag
_Country = countryName;
CountryFlag = DataGenerator.GetCountryFlag(countryName);
City = DataGenerator.GetCity(countryName);
OnPropertyChanged("Country");
}
publicevent PropertyChangedEventHandler PropertyChanged;
protectedvirtualvoidOnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
publicclassObsEmployeeProductivity
{
publicdouble Value { get; set; }
publicint Week { get; set; }
}
publicstaticclassObsEmployeeData
{
publicstatic ObservableCollection<ObsEmployeeInfo> Create(int? count, bool? useProductivity)
{
if (count == null) count = 100;
var employees = new ObservableCollection<ObsEmployeeInfo>();
for (int i = 0; i < count; i++)
{
var age = Math.Round(DataGenerator.GetNumber(20, 40));
var gender = DataGenerator.GetGender();
var firstName = DataGenerator.GetNameFirst(gender);
var lastName = DataGenerator.GetNameLast();
var street = DataGenerator.GetStreet();
var country = DataGenerator.GetCountry();
var city = DataGenerator.GetCity(country);
var email = firstName.ToLower() + "@" + DataGenerator.GetEmail();
var photoPath = DataGenerator.GetPhoto(gender);
var employee = new ObsEmployeeInfo
{
Index = i,
Address = street + ", " + city,
Age = age,
Birthday = DataGenerator.GetBirthday(),
City = city,
Email = email,
Gender = gender,
ID = DataGenerator.Pad(1001 + i, 4),
FirstName = firstName,
LastName = lastName,
Name = firstName + " " + lastName,
Photo = photoPath,
Phone = DataGenerator.GetPhone(),
Street = DataGenerator.GetStreet(),
Salary = DataGenerator.GetNumber(40, 200) * 1000,
Sales = DataGenerator.GetNumber(200, 980) * 1000,
};
employee.Country = country;
employee.Income = DataGenerator.GetIncomeRange(employee.Salary);
if (useProductivity.HasValue && useProductivity.Value)
{
employee.Productivity = GetProductivity(52);
}
employees.Add(employee);
}
return employees;
}
publicstatic ObservableCollection<ObsEmployeeProductivity> GetProductivity(int weekCount)
{
var productivity = new ObservableCollection<ObsEmployeeProductivity>();
for (var w = 1; w <= weekCount; w++)
{
varvalue = DataGenerator.GetNumber(-50, 50);
var prod = new ObsEmployeeProductivity
{
Value = value,
Week = w
};
productivity.Add(prod);
};
return productivity;
}
}
}
cs
functiononUpdatingTemplateColumn(grid, args) {
let content = args.content;
var row = args.cellInfo.dataRow;
if (content.childElementCount === 0) {
var deleteButton = document.createElement("button");
deleteButton.id = row;
var deleteSpan = document.createElement("span");
deleteSpan.textContent = "DELETE";
deleteButton.appendChild(deleteSpan);
deleteButton.onclick = function () {
var button = deleteButton;
DotNet.invokeMethodAsync('Infragistics.Samples', 'ButtonClickActionAtBlazorLevel', button.id);
}
content.appendChild(deleteButton);
}
}
// this code allows calling above functions from a .razor file
igRegisterScript("onUpdatingTemplateColumn", onUpdatingTemplateColumn, false);js
/*
CSS styles are loaded from the shared CSS file located at:
https://static.infragistics.com/xplatform/css/samples/
*/css
Like this sample? Get access to our complete Ignite UI for Blazor toolkit and start building your own apps in minutes. Download it for free.
개요
Blazor 데이터 그리드에서 편집은 Blazor 그리드의 EditMode 옵션을 사용하여 구성됩니다. 이 속성은 아래에 나열된 세 가지 다른 옵션을 사용합니다.
None: 편집이 활성화되지 않습니다.
Cell: 셀이 편집 모드로 들어가고 편집 모드를 종료할 때 값을 커밋할 수 있도록 허용합니다.
CellBatch: 셀이 편집 모드로 들어갈 수 있도록 허용하지만 변경 사항은 커밋될 때까지 나중에 캐시됩니다.
Row: 행이 편집 모드로 들어가고 종료 시 값을 커밋하도록 허용합니다.
CellBatch로 설정된 경우 변경 사항을 커밋하려면 그리드에서 commitEdits 메서드를 수행해야 합니다. 그리드는 셀이 커밋될 때까지 셀을 기울임꼴로 표시하여 변경 사항을 데이터 소스에 다시 푸시할 시기를 제어합니다.
또한 onCellValueChanging 이벤트를 연결하고 새 값이 커밋되기 전에 검사하여 오류 처리를 수행할 수 있습니다. 그리드는 오류 메시지를 출력할 수 있는 setEditError 메소드를 노출합니다. 유효한 값이 입력될 때까지 셀이 편집 모드로 유지됩니다. 그렇지 않으면 유효하지 않은 값을 되돌리기 위해 그리드의 rejectEdit 메소드를 수행할 수 있습니다. 유효하지 않은 값이 발견되지 않으면 그리드의 acceptEdit 메소드를 호출하여 변경 사항을 커밋할 수도 있습니다.
commitID 이벤트 인수를 매개변수로 전달하는 acceptCommit 또는 rejectCommit 메소드를 통해 onDataCommitting 연결하여 그리드 수준에서 커밋을 승인하거나 거부할 수 있습니다. 이 이벤트는 또한 커밋되기 전에 모든 수정 사항을 저장하는 changes 컬렉션을 노출합니다. 예를 들어 changes 컬렉션에 노출된 TransactionType 속성을 통해 커밋이 추가, 업데이트 또는 삭제 작업에서 발생했는지 확인하고 필요한 경우 acceptCommit 또는 rejectCommit 수행할 수 있습니다.
Excel Style Editing
EditOnKeyPress 사용하면 Excel의 작동 방식과 유사하게 입력할 때 즉시 편집을 시작할 수 있습니다. 또한 EditModeClickAction 속성을 SingleClick으로 설정하면 사용자가 다른 셀을 탐색하는 동안 셀을 빠르게 편집할 수 있습니다. 기본적으로 편집 모드로 들어가려면 두 번 클릭해야 합니다.