Skip to content

Commit ff394bf

Browse files
authored
Grid view bind bug #159 (#162)
* #159 pushing type though components, add BindAttribute example
1 parent da46d02 commit ff394bf

23 files changed

+220
-164
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
@page "/ControlSamples/GridView/BindAttribute"
2+
3+
<h2>Bug159Example</h2>
4+
5+
<Nav />
6+
7+
<GridView ItemType="Customer"
8+
AutogenerateColumns="false"
9+
DataKeyNames="CustomerID"
10+
SelectMethod="Customer.GetCustomers"
11+
EmptyDataText="No data available">
12+
<Columns>
13+
<BoundField ItemType="Customer" DataField="CustomerID" HeaderText="ID" />
14+
<BoundField ItemType="Customer" DataField="CompanyName" HeaderText="CompanyName" />
15+
<BoundField ItemType="Customer" DataField="FirstName" HeaderText="FirstName" />
16+
<BoundField ItemType="Customer" DataField="LastName" HeaderText="LastName" />
17+
<TemplateField ItemType="Customer">
18+
<ItemTemplate Context="Item">
19+
<input type="text" @bind="@Item.FirstName" />
20+
</ItemTemplate>
21+
</TemplateField>
22+
</Columns>
23+
</GridView>

samples/AfterBlazorServerSide/Pages/ControlSamples/GridView/Default.razor

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
@page "/ControlSamples/GridView"
2-
32
<h2>GridView Default Example</h2>
43

54
<Nav />
65

7-
<GridView ItemType="Customer"
6+
<GridView ItemType="Customer"
87
AutogenerateColumns="false"
98
DataKeyNames="CustomerID"
109
SelectMethod="Customer.GetCustomers"
1110
EmptyDataText="No data available">
1211
<Columns>
13-
<BoundField DataField="CustomerID" HeaderText="ID" />
14-
<BoundField DataField="CompanyName" HeaderText="CompanyName" />
15-
<BoundField DataField="FirstName" HeaderText="FirstName"/>
16-
<BoundField DataField="LastName" HeaderText="LastName"/>
17-
<TemplateField>
12+
<BoundField ItemType="Customer" DataField="CustomerID" HeaderText="ID" />
13+
<BoundField ItemType="Customer" DataField="CompanyName" HeaderText="CompanyName" />
14+
<BoundField ItemType="Customer" DataField="FirstName" HeaderText="FirstName"/>
15+
<BoundField ItemType="Customer" DataField="LastName" HeaderText="LastName"/>
16+
<TemplateField ItemType="Customer">
1817
<ItemTemplate Context="Item">
1918
<button type="button">Click Me! @Item.FirstName</button>
2019
</ItemTemplate>

samples/AfterBlazorServerSide/Pages/ControlSamples/GridView/Nav.razor

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
<NavLink href="./ControlSamples/GridView" class="component-link" Match="NavLinkMatch.All">Simple GridView </NavLink> |
44
<NavLink href="./ControlSamples/GridView/AutoGeneratedColumns" class="component-link" Match="NavLinkMatch.All">AutoGenerated Columns</NavLink> |
55
<NavLink href="./ControlSamples/GridView/TemplateFields" class="component-link" Match="NavLinkMatch.All">Template Fields</NavLink> |
6+
<NavLink href="./ControlSamples/GridView/BindAttribute" class="component-link" Match="NavLinkMatch.All">BindAttribute</NavLink> |
67
</div>

samples/AfterBlazorServerSide/Pages/ControlSamples/GridView/TemplateFields.razor

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
@page "/ControlSamples/GridView/TemplateFields"
2-
32
<h2>GridView Control</h2>
43

54
<Nav></Nav>
@@ -8,14 +7,14 @@
87
AutogenerateColumns="false"
98
ItemType="SharedSampleObjects.Models.Widget">
109
<Columns>
11-
<TemplateField HeaderText="Name">
10+
<TemplateField HeaderText="Name" ItemType="SharedSampleObjects.Models.Widget">
1211
<ItemTemplate Context="Item">
1312
<Label ID="lblName" Text="@Item.Name"></Label>
1413
</ItemTemplate>
1514
</TemplateField>
16-
<TemplateField HeaderText="Price">
15+
<TemplateField HeaderText="Price" ItemType="SharedSampleObjects.Models.Widget">
1716
<ItemTemplate Context="Item">
18-
<Label ID="lblPrice" Text="@Item.Price"></Label>
17+
<Label ID="lblPrice" Text="@Item.Price.ToString()"></Label>
1918
</ItemTemplate>
2019
</TemplateField>
2120
</Columns>
@@ -44,7 +43,7 @@
4443

4544
protected void Unnamed_Click()
4645
{
47-
foreach (GridViewRow row in TemplateFieldGridView.Rows)
46+
foreach (GridViewRow<Widget> row in TemplateFieldGridView.Rows)
4847
{
4948
var label = row.FindControl("lblPrice") as Label;
5049
label.Visible = !PriceVisibility;
Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,30 @@
11
<Project Sdk="Microsoft.NET.Sdk.Razor">
22

3-
<PropertyGroup>
4-
<TargetFramework>netcoreapp3.1</TargetFramework>
5-
<RazorLangVersion>3.0</RazorLangVersion>
6-
</PropertyGroup>
3+
<PropertyGroup>
4+
<TargetFramework>netcoreapp3.1</TargetFramework>
5+
<RazorLangVersion>3.0</RazorLangVersion>
6+
</PropertyGroup>
7+
8+
9+
<ItemGroup>
10+
<PackageReference Include="bunit" Version="1.0.0-beta-6" />
11+
<PackageReference Include="Microsoft.AspNetCore.Components" Version="3.1.1" />
12+
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="3.1.1" />
13+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
14+
<PackageReference Include="Moq" Version="4.13.1" />
15+
<PackageReference Include="Shouldly" Version="3.0.2" />
16+
<PackageReference Include="xunit.core" Version="2.4.1" />
17+
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
18+
<PrivateAssets>all</PrivateAssets>
19+
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
20+
</PackageReference>
21+
</ItemGroup>
22+
23+
24+
<ItemGroup>
25+
<ProjectReference Include="..\..\samples\SharedSampleObjects\SharedSampleObjects.csproj" />
26+
<ProjectReference Include="..\BlazorWebFormsComponents\BlazorWebFormsComponents.csproj" />
27+
</ItemGroup>
728

829
<ItemGroup>
930
<Content Include="Ads3.xml">
@@ -18,29 +39,4 @@
1839
</ItemGroup>
1940

2041

21-
<ItemGroup>
22-
<PackageReference Include="bunit" Version="1.0.0-beta-6" />
23-
<PackageReference Include="Microsoft.AspNetCore.Components" Version="3.1.1" />
24-
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="3.1.1" />
25-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.4.0" />
26-
<PackageReference Include="Moq" Version="4.13.1" />
27-
<PackageReference Include="Shouldly" Version="3.0.2" />
28-
<PackageReference Include="xunit.core" Version="2.4.1" />
29-
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1">
30-
<PrivateAssets>all</PrivateAssets>
31-
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
32-
</PackageReference>
33-
</ItemGroup>
34-
35-
36-
<ItemGroup>
37-
<ProjectReference Include="..\..\samples\SharedSampleObjects\SharedSampleObjects.csproj" />
38-
<ProjectReference Include="..\BlazorWebFormsComponents\BlazorWebFormsComponents.csproj" />
39-
</ItemGroup>
40-
41-
42-
<ItemGroup>
43-
<Folder Include="Validations\TypeComparers\" />
44-
</ItemGroup>
45-
4642
</Project>
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
@inherits TestComponentBase
2+
3+
<Fixture Test="FirstTest">
4+
<ComponentUnderTest>
5+
<GridView ItemType="Widget"
6+
AutogenerateColumns="false"
7+
SelectMethod="GetWidgets">
8+
<Columns>
9+
<BoundField ItemType="Widget" DataField="Id" HeaderText="ID" />
10+
<BoundField ItemType="Widget" DataField="Name" HeaderText="Widget Name" />
11+
<TemplateField ItemType="Widget" HeaderText="Name">
12+
<ItemTemplate Context="Item">
13+
<input type="text" @bind="@Item.Name" />
14+
</ItemTemplate>
15+
</TemplateField>
16+
</Columns>
17+
</GridView>
18+
</ComponentUnderTest>
19+
</Fixture>
20+
21+
22+
@code {
23+
void FirstTest()
24+
{
25+
var cut = GetComponentUnderTest();
26+
System.Diagnostics.Debug.WriteLine(cut.Markup);
27+
28+
Assert.True(true, "bind attribute wasn't compiling");
29+
30+
}
31+
32+
IQueryable<Widget>
33+
GetWidgets(int maxRows, int startRowIndex, string sortByExpression, out int totalRowCount)
34+
{
35+
totalRowCount = 1;
36+
return Widget.SimpleWidgetList.Take(1).AsQueryable();
37+
}
38+
}

src/BlazorWebFormsComponents.Test/GridView/DataBoundFields.razor

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,29 +6,29 @@
66
AutogenerateColumns="false"
77
SelectMethod="GetWidgets">
88
<Columns>
9-
<BoundField DataField="Id" HeaderText="ID" />
10-
<BoundField DataField="Name" HeaderText="Widget Name" />
9+
<BoundField ItemType="Widget" DataField="Id" HeaderText="ID" />
10+
<BoundField ItemType="Widget" DataField="Name" HeaderText="Widget Name" />
1111
</Columns>
1212
</GridView>
1313
</ComponentUnderTest>
1414
</Fixture>
1515

1616

1717
@code {
18-
void FirstTest()
19-
{
20-
var cut = GetComponentUnderTest();
21-
var tableHeaders = cut.FindAll("th");
22-
tableHeaders[0].TextContent.ShouldBe("ID");
23-
tableHeaders[1].TextContent.ShouldBe("Widget Name");
24-
tableHeaders.Count.ShouldBe(2, "Did not render 2 TH elements");
25-
cut.FindAll("tr").Count(e => e.InnerHtml.Contains("td")).ShouldBe(3, "Did not render 3 TR elements");
26-
cut.FindAll("td").Count().ShouldBe(6, "Did not render 6 TD elements");
27-
}
18+
void FirstTest()
19+
{
20+
var cut = GetComponentUnderTest();
21+
var tableHeaders = cut.FindAll("th");
22+
tableHeaders[0].TextContent.ShouldBe("ID");
23+
tableHeaders[1].TextContent.ShouldBe("Widget Name");
24+
tableHeaders.Count.ShouldBe(2, "Did not render 2 TH elements");
25+
cut.FindAll("tr").Count(e => e.InnerHtml.Contains("td")).ShouldBe(3, "Did not render 3 TR elements");
26+
cut.FindAll("td").Count().ShouldBe(6, "Did not render 6 TD elements");
27+
}
2828

29-
IQueryable<Widget> GetWidgets(int maxRows, int startRowIndex, string sortByExpression, out int totalRowCount)
30-
{
31-
totalRowCount = Widget.SimpleWidgetList.Length;
32-
return Widget.SimpleWidgetList.AsQueryable();
33-
}
29+
IQueryable<Widget> GetWidgets(int maxRows, int startRowIndex, string sortByExpression, out int totalRowCount)
30+
{
31+
totalRowCount = Widget.SimpleWidgetList.Length;
32+
return Widget.SimpleWidgetList.AsQueryable();
33+
}
3434
}

src/BlazorWebFormsComponents.Test/GridView/TemplateFields.razor

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66
AutogenerateColumns="false"
77
ItemType="SharedSampleObjects.Models.Widget">
88
<Columns>
9-
<TemplateField HeaderText="Name">
9+
<TemplateField ItemType="Widget" HeaderText="Name">
1010
<ItemTemplate Context="Item">
11-
<label></label>
11+
<label Text="@Item.Name"></label>
1212
</ItemTemplate>
1313
</TemplateField>
14-
<TemplateField HeaderText="Price">
14+
<TemplateField ItemType="Widget" HeaderText="Price">
1515
<ItemTemplate Context="Item">
16-
<button></button>
16+
<label ID="lblPrice" Text="@Item.Price.ToString()"></label>
1717
</ItemTemplate>
1818
</TemplateField>
1919
</Columns>
@@ -23,21 +23,21 @@
2323

2424
@code {
2525

26-
void FirstTest()
27-
{
28-
var cut = GetComponentUnderTest();
29-
var tableHeaders = cut.FindAll("th");
30-
tableHeaders[0].TextContent.ShouldBe("Name");
31-
tableHeaders[1].TextContent.ShouldBe("Price");
32-
tableHeaders.Count.ShouldBe(2, "Did not render 2 TH elements");
33-
cut.FindAll("tr").Count(e => e.InnerHtml.Contains("td")).ShouldBe(3, "Did not render 3 TR elements");
34-
cut.FindAll("td").Count(e => e.InnerHtml.Contains("label")).ShouldBe(3, "Did not render 3 labels");
35-
cut.FindAll("td").Count(e => e.InnerHtml.Contains("button")).ShouldBe(3, "Did not render 3 buttons");
36-
}
26+
void FirstTest()
27+
{
28+
var cut = GetComponentUnderTest();
29+
System.Diagnostics.Debug.Write(cut.Markup);
30+
var tableHeaders = cut.FindAll("th");
31+
tableHeaders[0].TextContent.ShouldBe("Name");
32+
tableHeaders[1].TextContent.ShouldBe("Price");
33+
tableHeaders.Count.ShouldBe(2, "Did not render 2 TH elements");
34+
cut.FindAll("tr").Count(e => e.InnerHtml.Contains("td")).ShouldBe(3, "Did not render 3 TR elements");
35+
cut.FindAll("td label").Count().ShouldBe(6, "Did not render 6 labels");
36+
}
3737

38-
IQueryable<Widget> GetWidgets(int maxRows, int startRowIndex, string sortByExpression, out int totalRowCount)
39-
{
40-
totalRowCount = Widget.SimpleWidgetList.Length;
41-
return Widget.SimpleWidgetList.AsQueryable();
42-
}
38+
IQueryable<Widget> GetWidgets(int maxRows, int startRowIndex, string sortByExpression, out int totalRowCount)
39+
{
40+
totalRowCount = Widget.SimpleWidgetList.Length;
41+
return Widget.SimpleWidgetList.AsQueryable();
42+
}
4343
}

src/BlazorWebFormsComponents/BaseColumn.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33

44
namespace BlazorWebFormsComponents
55
{
6-
public abstract class BaseColumn : BaseWebFormsComponent, IColumn
6+
public abstract class BaseColumn<ItemType> : BaseWebFormsComponent, IColumn<ItemType>
77
{
88
///<inheritdoc/>
99
[CascadingParameter(Name = "ColumnCollection")]
10-
public IColumnCollection ParentColumnsCollection { get; set; }
10+
public IColumnCollection<ItemType> ParentColumnsCollection { get; set; }
1111

1212
///<inheritdoc/>
1313
[Parameter] public string HeaderText { get; set; }

src/BlazorWebFormsComponents/BaseRow.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ namespace BlazorWebFormsComponents
66
/// <summary>
77
/// Base abstract row class
88
/// </summary>
9-
public abstract class BaseRow : BaseWebFormsComponent, IRow
9+
public abstract class BaseRow<ItemType> : BaseWebFormsComponent, IRow<ItemType>
1010
{
1111
///<inheritdoc/>
12-
[CascadingParameter(Name = "RowCollection")] public IRowCollection RowCollection { get; set; }
12+
[CascadingParameter(Name = "RowCollection")] public IRowCollection<ItemType> RowCollection { get; set; }
1313

1414
///<inheritdoc/>
15-
[Parameter] public object DataItem { get; set; }
15+
[Parameter] public ItemType DataItem { get; set; }
1616

1717
public void Dispose()
1818
{

0 commit comments

Comments
 (0)