Skip to content

Commit 50772d5

Browse files
authored
DataGrid: allow custom edit templates to overflow (#6582)
1 parent 2c4c612 commit 50772d5

3 files changed

Lines changed: 78 additions & 9 deletions

File tree

Source/Extensions/Blazorise.DataGrid/Internal/_DataGridRowEdit.razor

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,11 +135,21 @@ else if ( EditMode == DataGridEditMode.Inline || EditMode == DataGridEditMode.Ce
135135
else if ( column.Displaying )
136136
{
137137
var cellStyle = column.BuildCellStyle( Item );
138+
var isCustomEditTemplate = column.EditTemplate is not null;
139+
var cellEditWrapperStyle = isCustomEditTemplate
140+
? "width:100%;max-width:100%;min-width:0;"
141+
: "width:100%;max-width:100%;min-width:0;overflow:hidden;";
142+
138143
if ( column.CellValueIsEditable )
139144
{
140145
cellStyle = string.IsNullOrWhiteSpace( cellStyle )
141-
? "min-width:0;overflow:hidden;"
142-
: $"{cellStyle};min-width:0;overflow:hidden;";
146+
? "min-width:0;"
147+
: $"{cellStyle};min-width:0;";
148+
149+
if ( !isCustomEditTemplate )
150+
{
151+
cellStyle = $"{cellStyle};overflow:hidden;";
152+
}
143153

144154
if ( column.CellEditing && !string.IsNullOrWhiteSpace( ParentDataGrid.activeCellEditWidth ) )
145155
{
@@ -149,15 +159,15 @@ else if ( EditMode == DataGridEditMode.Inline || EditMode == DataGridEditMode.Ce
149159

150160
<TableRowCell @key=column Class="@column.CellClass?.Invoke( Item )" Style="@cellStyle"
151161
data-column-id="@column.ElementId"
152-
@onkeydown="@(ParentDataGrid.IsCellEdit? async( args) => await HandleCellKeyDown( args, column ) : default)"
162+
@onkeydown="@(ParentDataGrid.IsCellEdit ? async ( args ) => await HandleCellKeyDown( args, column ) : default)"
153163
@onclick=@(ParentDataGrid.IsCellEditOnSingleClick && !column.CellValueIsEditable ? async () => await HandleCellClick( column ) : default)
154164
@ondblclick=@(ParentDataGrid.IsCellEditOnDoubleClick && !column.CellValueIsEditable ? async () => await HandleCellClick( column ) : default)
155165
TextAlignment="@column.TextAlignment" TextTransform="@column.TextTransform" TextDecoration="@column.TextDecoration" TextWeight="@column.TextWeight" TextOverflow="@column.TextOverflow" TextSize="@column.TextSize"
156166
VerticalAlignment="@column.VerticalAlignment" Display="@column.Display" Flex="@column.Flex" Gap="@column.Gap" FixedPosition="@column.FixedPosition" Width="@column.Width"
157167
MobileModeCaption="@column.Caption">
158168
@if ( column.CellValueIsEditable )
159169
{
160-
<Div Style="width:100%;max-width:100%;min-width:0;overflow:hidden;">
170+
<Div Style="@cellEditWrapperStyle">
161171
<_DataGridCell TItem="TItem" Column="@column" Item="@Item" ValidationItem="@ValidationItem" CellEditContext="@CellValues[column.ElementId]" ShowValidationFeedback="@ParentDataGrid.ShowValidationFeedback" />
162172
</Div>
163173
}

Tests/BasicTestApp.Client/DataGridComponent.razor

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,18 +34,37 @@
3434
<ClearFilterCommandTemplate>
3535
<Button ElementId="btnClearFilter" Color="Color.Warning" Clicked="@context.Clicked">@context.LocalizationString</Button>
3636
</ClearFilterCommandTemplate>
37-
</DataGridCommandColumn>
38-
<DataGridColumn TextAlignment="TextAlignment.Center"
37+
</DataGridCommandColumn>
38+
<DataGridColumn TextAlignment="TextAlignment.Center"
3939
TItem="Employee"
4040
Field="@nameof( Employee.Fraction )"
4141
Caption="Fraction"
4242
SortField="@nameof( Employee.FractionValue )"
4343
SortDirection="SortDirection.Ascending"
4444
Editable="false" />
45+
@if ( UseNameEditTemplate )
46+
{
4547
<DataGridColumn TItem="Employee"
46-
Field="@nameof( Employee.Name )"
47-
Caption="Name"
48-
Editable />
48+
Field="@nameof( Employee.Name )"
49+
Caption="Name"
50+
Editable>
51+
<EditTemplate>
52+
<Autocomplete TValue="string"
53+
TItem="string"
54+
Data="@Names"
55+
TextField="name => name"
56+
ValueField="name => name"
57+
MinSearchLength="0" />
58+
</EditTemplate>
59+
</DataGridColumn>
60+
}
61+
else
62+
{
63+
<DataGridColumn TItem="Employee"
64+
Field="@nameof( Employee.Name )"
65+
Caption="Name"
66+
Editable />
67+
}
4968
</DataGridColumns>
5069
<EmptyTemplate>
5170
No Records...
@@ -66,6 +85,17 @@
6685
[Parameter]
6786
public DataGridEditMode DataGridEditMode { get; set; }
6887

88+
[Parameter]
89+
public bool UseNameEditTemplate { get; set; }
90+
91+
public IEnumerable<string> Names { get; set; } = new List<string>
92+
{
93+
"John",
94+
"Sarah",
95+
"Paul",
96+
"Ana",
97+
};
98+
6999
[Parameter]
70100
public IEnumerable<Employee> Data { get; set; } = new List<Employee>()
71101
{

Tests/Blazorise.Tests/Components/DataGridComponentTest.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -744,6 +744,35 @@ await comp.Input( "input", updatedName,
744744
comp.WaitForAssertion( () => Assert.Contains( comp.Instance.Data, x => x.Name == updatedName ), System.TimeSpan.FromSeconds( 3 ) );
745745
}
746746

747+
[Fact]
748+
public async Task EditTemplate_Should_NotClip_CustomEditor()
749+
{
750+
// setup
751+
var comp = Render<DataGridComponent>( parameters =>
752+
{
753+
parameters.Add( x => x.DataGridEditMode, DataGridEditMode.Inline );
754+
parameters.Add( x => x.UseNameEditTemplate, true );
755+
} );
756+
757+
// test
758+
await comp.Click( "#btnEdit" );
759+
760+
var autocomplete = comp.Find( ".b-is-autocomplete" );
761+
var wrapper = autocomplete.ParentElement;
762+
var cell = wrapper;
763+
764+
while ( cell is not null && cell.TagName != "TD" )
765+
{
766+
cell = cell.ParentElement;
767+
}
768+
769+
// validate
770+
Assert.NotNull( wrapper );
771+
Assert.NotNull( cell );
772+
Assert.DoesNotContain( "overflow:hidden", wrapper.GetAttribute( "style" ) );
773+
Assert.DoesNotContain( "overflow:hidden", cell.GetAttribute( "style" ) );
774+
}
775+
747776
[Theory]
748777
[InlineData( DataGridEditMode.Form )]
749778
[InlineData( DataGridEditMode.Inline )]

0 commit comments

Comments
 (0)