Как динамически добавить GridForeignColumn в сетку Syncfusion Blazor?C#

Место общения программистов C#
Ответить
Anonymous
 Как динамически добавить GridForeignColumn в сетку Syncfusion Blazor?

Сообщение Anonymous »

Вот в чем проблема. У нас есть сетка, в которой может быть более 100 столбцов. Не спрашивайте, почему мы не можем это ограничить, мы просто не можем, им нужен доступ ко всем столбцам. Однако Blazor Grid Syncfusion работает очень медленно, когда все эти столбцы активны.
Поэтому мы пытаемся позволить пользователю скрывать столбцы, которые ему не нужны для работы. Мы попробовали встроенный селектор столбцов для сетки, но он все равно медленный, поскольку SfGrid все еще должен выяснить, что и когда показывать (или что-то в этом роде, я уверен).
Поэтому я привел к программному отображению столбцов на странице бритвы, используя операторы if вокруг каждого столбца, чтобы включать или выключать их по выбору пользователя. Это работает, если столбец включен, он всегда добавляется в конец столбцов в таблице, а не вставляется в зависимости от его положения на странице Razor.
И вот, наконец, я создал список GridColumns в коде C# для страницы, а затем назначил эти столбцы сетке и обновил их при изменении выбора столбца. Это помогает поддерживать порядок и на самом деле это довольно быстро. Но некоторые столбцы имеют тип GridForeignColumn и по какой-то причине при отображении никогда не отображают никаких данных. Я могу сказать, что они получают данные из источника данных сетки, потому что при входе в режим редактирования в одной из этих ячеек значение отображается. Поэтому я предполагаю, что он неправильно привязывает ForeignDataSource для столбца или каким-то образом я добавляю их в сетку, просто рассматривая их как обычные GridColumns. Я подтвердил, что данные не являются нулевыми, когда они прикреплены к ForeignDataSource для столбца.
Будем очень благодарны за любую помощь. Вот пример кода того, что у меня сейчас происходит. Вы можете предположить, что у меня есть некоторый элемент управления, который правильно устанавливает логические значения для отображения столбцов.

Код: Выделить всё





@code {
private SfGrid GridInstance { get; set; }
private List GridData { get; set; }

private class SelectListItem {
public int? Value { get; set; }
public string Text { get; set; }
}

private List Projects;

private List activeColumns = new List()
{
"Id",
"Name",
"Location",
"Project",
"ProjectId"
}

protected override async Task OnInitializedAsync()
{
GridData = await SomeMethodThatGetsTheGridData();
Projects = await SomeMethodThatGetsTheProjects();
await RefreshGridColumnsInOrder();
}

private async Task RefreshGridColumnsInOrder()
{
var gridColumns = new List() {
new GridColumn() {
Field = "Id",
IsFrozen = true,
Freeze = FreezeDirection.Left,
HeaderText = "Unique Id",
AllowEditing = false
}
};
var index = 0;

foreach(var colName in activeColumns)
{
switch (colName)
{
case "Name":
gridColumns.Insert(index, new GridColumn() {
Field = "Name",
IsFrozen = true,
Freeze = FreezeDirection.Left,
HeaderText = "Name"
});
break;
case "Location":
gridColumns.Insert(index, new GridColumn() {
Field = "Location",
HeaderText = "Location"
});
break;
case "Project":
gridColumns.Insert(index, new GridForeignColumn() {
Field = "ProjectId",
HeaderText = "Project Name",
ForeignDataSource = Projects,
ForeignKeyField = "Value",
ForeignKeyValue = "Text"
});
break;
case "ProjectId":
gridColumns.Insert(index, new GridColumn() {
Field = "ProjectId",
HeaderText = "Project ID"
});
}
index++;
}

GridInstance.Columns = gridColumns;
await GridInstance.RefreshColumnsAsync();
}
}
Кстати, мне пришлось установить

Код: Выделить всё

AllowResizing
[/b] на false, потому что это вызывало проблему: когда начиналось изменение размера столбца, я получал сообщение об ошибке, в котором говорилось, что невозможно прочитать свойство [/b] из не определено. Если бы кто-нибудь мог помочь и с этим, было бы тоже неплохо.

Подробнее здесь: https://stackoverflow.com/questions/798 ... lazor-grid
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»