-
-
-
-
-
- @foreach (var band in bandLayout.Bands)
+
+ @if (bandEditorExpanded)
{
-
-
-
+
+
+
+
+
+
+ @foreach (var band in bandLayout.Bands)
+ {
+
+
+
+
+ }
+
+ @foreach (var column in columnDefinitions)
+ {
+
+
+
+ }
+
}
-
- @foreach (var column in columnDefinitions)
- {
-
-
-
- }
-
@@ -178,6 +187,7 @@ else
private List bandOptions = new();
private Dictionary columnLookup = new();
private bool gridLayoutApplied;
+ private bool bandEditorExpanded;
private List columnDefinitions = new()
{
@@ -281,7 +291,6 @@ else
{
if (string.IsNullOrWhiteSpace(layoutUser))
return;
-
try
{
CaptureColumnLayoutFromGrid();
@@ -299,41 +308,31 @@ else
{
if (string.IsNullOrWhiteSpace(layoutUser))
return;
-
await BandLayoutService.ResetBandLayoutAsync(LayoutType, LayoutKey, layoutUser);
-
bandLayout = new BandLayout();
columnBandAssignments.Clear();
UpdateBandOptions();
-
foreach (var column in columnDefinitions)
column.Width = null;
columnLookup = columnDefinitions.ToDictionary(c => c.FieldName, StringComparer.OrdinalIgnoreCase);
-
_sizeMode = SizeMode.Medium;
-
if (gridRef != null)
gridRef.LoadLayout(new GridPersistentLayout());
gridLayoutApplied = false;
-
infoMessage = "Layout zurückgesetzt.";
errorMessage = null;
}
private void CaptureColumnLayoutFromGrid()
{
- if (gridRef == null)
- return;
-
+ if (gridRef == null) return;
var layout = gridRef.SaveLayout();
bandLayout.GridLayout = layout;
bandLayout.SizeMode = _sizeMode;
-
var orderedColumns = layout.Columns
.Where(c => !string.IsNullOrWhiteSpace(c.FieldName))
.OrderBy(c => c.VisibleIndex)
.ToList();
-
bandLayout.ColumnOrder = orderedColumns.Select(c => c.FieldName).ToList();
bandLayout.ColumnWidths = orderedColumns
.Where(c => !string.IsNullOrWhiteSpace(c.Width))
@@ -407,15 +406,12 @@ else
builder.OpenComponent(seq++);
builder.AddAttribute(seq++, "Width", "120px");
builder.CloseComponent();
-
var grouped = bandLayout.Bands.SelectMany(b => b.Columns).ToHashSet(StringComparer.OrdinalIgnoreCase);
foreach (var column in columnDefinitions.Where(c => !grouped.Contains(c.FieldName)))
BuildDataColumn(builder, ref seq, column);
-
foreach (var band in bandLayout.Bands)
{
if (band.Columns.Count == 0) continue;
-
builder.OpenComponent(seq++);
builder.AddAttribute(seq++, "Caption", band.Caption);
builder.AddAttribute(seq++, "Columns", (RenderFragment)(bandBuilder =>
@@ -458,14 +454,12 @@ else
private void OnEditFieldChanged(object? sender, FieldChangedEventArgs e)
{
if (validationMessageStore == null || editContext == null) return;
-
if (e.FieldIdentifier.FieldName == nameof(MassDataEditModel.UpdateProcedure))
{
validationMessageStore.Clear();
editContext.NotifyValidationStateChanged();
return;
}
-
if (e.FieldIdentifier.FieldName == nameof(MassDataEditModel.CustomerName))
{
validationMessageStore.Clear(new FieldIdentifier(editContext.Model, nameof(MassDataEditModel.CustomerName)));
@@ -483,7 +477,6 @@ else
SetPopupHeaderText(true);
return;
}
-
var item = (MassDataReadDto)e.DataItem;
e.EditModel = new MassDataEditModel
{
@@ -505,7 +498,6 @@ else
infoMessage = null;
validationMessageStore?.Clear();
editContext?.NotifyValidationStateChanged();
-
var editModel = (MassDataEditModel)e.EditModel;
if (!decimal.TryParse(editModel.AmountText, out var amount))
{
@@ -513,7 +505,6 @@ else
e.Cancel = true;
return;
}
-
if (editModel.IsNew)
{
var existing = await Api.GetByCustomerNameAsync(editModel.CustomerName);
@@ -524,7 +515,6 @@ else
return;
}
}
-
var dto = new MassDataWriteDto
{
CustomerName = editModel.CustomerName,
@@ -532,7 +522,6 @@ else
Category = editModel.Category,
StatusFlag = editModel.StatusFlag
};
-
try
{
var saved = await Api.UpsertAsync(dto);
diff --git a/DbFirst.BlazorWebApp/wwwroot/app.css b/DbFirst.BlazorWebApp/wwwroot/app.css
index 64f78e2..30c9d2d 100644
--- a/DbFirst.BlazorWebApp/wwwroot/app.css
+++ b/DbFirst.BlazorWebApp/wwwroot/app.css
@@ -11,6 +11,7 @@ html, body {
.app-light {
--band-editor-bg: #f8f9fa;
--band-editor-border: #dee2e6;
+ --band-toggle-hover-bg: #e9ecef;
}
.app-dark {
@@ -18,6 +19,7 @@ html, body {
color: #f1f1f1;
--band-editor-bg: #2d2d2d;
--band-editor-border: #444444;
+ --band-toggle-hover-bg: #3a3a3a;
}
a, .btn-link {
@@ -74,15 +76,47 @@ h1:focus {
/* Grid Band-Editor */
.band-editor {
- display: flex;
- flex-direction: column;
- gap: 12px;
- padding: 12px;
margin-top: 4px;
margin-bottom: 16px;
border: 1px solid var(--band-editor-border);
border-radius: 4px;
background-color: var(--band-editor-bg);
+ overflow: hidden;
+}
+
+.band-editor-toggle {
+ display: flex;
+ align-items: center;
+ gap: 8px;
+ width: 100%;
+ padding: 8px 12px;
+ background: none;
+ border: none;
+ cursor: pointer;
+ font-size: inherit;
+ color: inherit;
+ text-align: left;
+}
+
+ .band-editor-toggle:hover {
+ background-color: var(--band-toggle-hover-bg);
+ }
+
+.band-editor-toggle-icon {
+ font-size: 0.7rem;
+ transition: transform 0.2s ease;
+ display: inline-block;
+}
+
+ .band-editor-toggle-icon.expanded {
+ transform: rotate(90deg);
+ }
+
+.band-editor-body {
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+ padding: 0 12px 12px 12px;
}
.band-controls {