Skip to content

Commit 0c10b01

Browse files
authored
DataList bind item and data (#63) (#74)
1 parent 925bdc7 commit 0c10b01

File tree

4 files changed

+202
-86
lines changed

4 files changed

+202
-86
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
*.user
99
*.userosscache
1010
*.sln.docstates
11+
*.ncrunchproject
12+
*.ncrunchsolution
1113

1214
# User-specific files (MonoDevelop/Xamarin Studio)
1315
*.userprefs
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
@inherits TestComponentBase
2+
3+
@using System.Diagnostics;
4+
5+
<Fixture Test="ShouldTriggerEvents">
6+
<ComponentUnderTest>
7+
<DataList ID="simpleDataList"
8+
Items="Widget.SimpleWidgetList"
9+
ItemType="Widget"
10+
RepeatLayout="Flow"
11+
OnDataBound="DataBound"
12+
OnDataBinding="DataBinding"
13+
OnItemDataBound="ItemDataBound"
14+
Context="Item">
15+
<HeaderTemplate>My Widget List</HeaderTemplate>
16+
<ItemTemplate><item>@Item.Name</item></ItemTemplate>
17+
</DataList>
18+
</ComponentUnderTest>
19+
</Fixture>
20+
21+
@code{
22+
23+
int databinding = 0;
24+
int databound = 0;
25+
int itemDatabound = 0;
26+
27+
void DataBinding(EventArgs args)
28+
{
29+
databinding++;
30+
}
31+
32+
void DataBound(EventArgs args)
33+
{
34+
databound++;
35+
}
36+
37+
void ItemDataBound(ListViewItemEventArgs args)
38+
{
39+
itemDatabound++;
40+
}
41+
}
42+
43+
@code{
44+
void ShouldTriggerEvents()
45+
{
46+
// Arrange
47+
var cut = GetComponentUnderTest();
48+
Debug.WriteLine(cut.Markup);
49+
50+
// Assert
51+
databinding.ShouldBeGreaterThan(0);
52+
databound.ShouldBeGreaterThan(0);
53+
itemDatabound.ShouldBeGreaterThanOrEqualTo(3);
54+
cut.FindAll("item").Count().ShouldBe(3);
55+
}
56+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
@inherits TestComponentBase
2+
3+
@using System.Diagnostics;
4+
5+
<Fixture Test="ShouldTriggerEvents">
6+
<ComponentUnderTest>
7+
<DataList ID="simpleDataList"
8+
Items="Widget.SimpleWidgetList"
9+
ItemType="Widget"
10+
RepeatLayout="Table"
11+
OnDataBound="DataBound"
12+
OnDataBinding="DataBinding"
13+
OnItemDataBound="ItemDataBound"
14+
Context="Item">
15+
<HeaderTemplate>My Widget List</HeaderTemplate>
16+
<ItemTemplate><span>@Item.Name</span></ItemTemplate>
17+
</DataList>
18+
</ComponentUnderTest>
19+
</Fixture>
20+
21+
@code{
22+
23+
int databinding = 0;
24+
int databound = 0;
25+
int itemDatabound = 0;
26+
27+
void DataBinding(EventArgs args)
28+
{
29+
databinding++;
30+
}
31+
32+
void DataBound(EventArgs args)
33+
{
34+
databound++;
35+
}
36+
37+
void ItemDataBound(ListViewItemEventArgs args)
38+
{
39+
itemDatabound++;
40+
}
41+
}
42+
43+
@code{
44+
void ShouldTriggerEvents()
45+
{
46+
// Arrange
47+
var cut = GetComponentUnderTest();
48+
Debug.WriteLine(cut.Markup);
49+
50+
// Assert
51+
databinding.ShouldBeGreaterThan(0);
52+
databound.ShouldBeGreaterThan(0);
53+
itemDatabound.ShouldBeGreaterThanOrEqualTo(3);
54+
cut.FindAll("span").Count().ShouldBe(3);
55+
}
56+
}

src/BlazorWebFormsComponents/DataList.razor

Lines changed: 88 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -19,118 +19,120 @@
1919
</CascadingValue>
2020

2121

22-
@switch (RepeatLayout)
22+
@switch (RepeatLayout)
23+
{
24+
25+
case TableRepeatLayout t:
26+
<table accesskey="@AccessKey"
27+
cellpadding="@(CellPadding == default ? null : (int?)CellPadding)"
28+
cellspacing="@(CellSpacing == default ? null : (int?)CellSpacing)"
29+
rules="@CalculatedGridLines"
30+
style="border-collapse:collapse;@CalculatedStyle"
31+
tabindex="@(TabIndex == default ? null : (short?)TabIndex)"
32+
title="@ToolTip">
33+
34+
@if (HeaderTemplate != null && ShowHeader)
35+
{
36+
37+
if (!string.IsNullOrEmpty(Caption))
2338
{
39+
<caption align="@(CaptionAlign == VerticalAlign.NotSet ? null : CaptionAlign.ToString())">@Caption</caption>
40+
}
2441

25-
case TableRepeatLayout t:
26-
<table accesskey="@AccessKey"
27-
cellpadding="@(CellPadding == default ? null : (int?)CellPadding)"
28-
cellspacing="@(CellSpacing == default ? null : (int?)CellSpacing)"
29-
rules="@CalculatedGridLines"
30-
style="border-collapse:collapse;@CalculatedStyle"
31-
tabindex="@(TabIndex == default ? null : (short?)TabIndex)"
32-
title="@ToolTip">
33-
34-
@if (HeaderTemplate != null && ShowHeader)
35-
{
36-
37-
if (!string.IsNullOrEmpty(Caption))
38-
{
39-
<caption align="@(CaptionAlign == VerticalAlign.NotSet ? null : CaptionAlign.ToString())">@Caption</caption>
40-
}
41-
42-
<tr>
43-
@if (UseAccessibleHeader)
44-
{
45-
<th style="@HeaderStyle" class="@HeaderStyle.CssClass">@HeaderTemplate</th>
46-
}
47-
else
48-
{
49-
<td style="@HeaderStyle" class="@HeaderStyle.CssClass">@HeaderTemplate</td>
50-
}
51-
</tr>
52-
53-
}
54-
55-
@if (Items?.Any() ?? false)
56-
{
57-
58-
var even = true;
59-
var first = true;
60-
61-
@foreach (var item in Items)
62-
{
63-
64-
if (!first && SeparatorTemplate != null)
65-
{
66-
<tr><td style="@SeparatorStyle">@SeparatorTemplate</td></tr>
67-
}
68-
69-
70-
<tr><td style="@(even ? ItemStyle : AlternatingItemTemplate == null ? ItemStyle : AlternatingItemStyle)">@(even ? ItemTemplate(item) : AlternatingItemTemplate == null ? ItemTemplate(item) : AlternatingItemTemplate(item))</td></tr>
42+
<tr>
43+
@if (UseAccessibleHeader)
44+
{
45+
<th style="@HeaderStyle" class="@HeaderStyle.CssClass">@HeaderTemplate</th>
46+
}
47+
else
48+
{
49+
<td style="@HeaderStyle" class="@HeaderStyle.CssClass">@HeaderTemplate</td>
50+
}
51+
</tr>
52+
53+
}
54+
55+
@if (Items?.Any() ?? false)
56+
{
57+
var even = true;
58+
var first = true;
59+
OnDataBinding.InvokeAsync(EventArgs.Empty);
60+
61+
@foreach (var item in Items)
62+
{
7163

72-
even = !even;
73-
first = false;
64+
if (!first && SeparatorTemplate != null)
65+
{
66+
<tr><td style="@SeparatorStyle">@SeparatorTemplate</td></tr>
67+
}
7468

75-
}
76-
}
7769

78-
@if (FooterTemplate != null && ShowFooter)
79-
{
70+
<tr><td style="@(even ? ItemStyle : AlternatingItemTemplate == null ? ItemStyle : AlternatingItemStyle)">@(even ? ItemTemplate(item) : AlternatingItemTemplate == null ? ItemTemplate(item) : AlternatingItemTemplate(item))</td></tr>
71+
OnItemDataBound.InvokeAsync(new ListViewItemEventArgs(item));
72+
even = !even;
73+
first = false;
8074

81-
<tr><td style="@FooterStyle" class="@FooterStyle.CssClass">@FooterTemplate</td></tr>
75+
}
76+
OnDataBound.InvokeAsync(EventArgs.Empty);
77+
}
8278

83-
}
79+
@if (FooterTemplate != null && ShowFooter)
80+
{
8481

82+
<tr><td style="@FooterStyle" class="@FooterStyle.CssClass">@FooterTemplate</td></tr>
8583

86-
</table>
87-
break;
88-
case FlowRepeatLayout f:
84+
}
8985

90-
<span accesskey="@AccessKey" style="@CalculatedStyle" title="@ToolTip" tabindex="@(TabIndex == default ? null : (short?)TabIndex)">
9186

92-
@if (HeaderTemplate != null && ShowHeader)
93-
{
87+
</table>
88+
break;
89+
case FlowRepeatLayout f:
9490

95-
<span class="@HeaderStyle.CssClass" style="@HeaderStyle">@HeaderTemplate</span><br />
91+
<span accesskey="@AccessKey" style="@CalculatedStyle" title="@ToolTip" tabindex="@(TabIndex == default ? null : (short?)TabIndex)">
9692

97-
}
93+
@if (HeaderTemplate != null && ShowHeader)
94+
{
9895

99-
@if (Items?.Any() ?? false)
100-
{
96+
<span class="@HeaderStyle.CssClass" style="@HeaderStyle">@HeaderTemplate</span><br />
10197

102-
var even = true;
103-
var first = true;
98+
}
10499

105-
@foreach (var item in Items)
106-
{
100+
@if (Items?.Any() ?? false)
101+
{
107102

108-
if (!first && SeparatorTemplate != null)
109-
{
110-
<span style="@SeparatorStyle">@SeparatorTemplate</span>
111-
}
103+
var even = true;
104+
var first = true;
105+
OnDataBinding.InvokeAsync(EventArgs.Empty);
106+
@foreach (var item in Items)
107+
{
112108

113-
<span style="@(even ? ItemStyle : AlternatingItemTemplate == null ? ItemStyle : AlternatingItemStyle)">@(even ? ItemTemplate(item) : AlternatingItemTemplate == null ? ItemTemplate(item) : AlternatingItemTemplate(item))</span><br />
109+
if (!first && SeparatorTemplate != null)
110+
{
111+
<span style="@SeparatorStyle">@SeparatorTemplate</span>
112+
}
114113

115-
even = !even;
116-
first = false;
114+
<span style="@(even ? ItemStyle : AlternatingItemTemplate == null ? ItemStyle : AlternatingItemStyle)">@(even ? ItemTemplate(item) : AlternatingItemTemplate == null ? ItemTemplate(item) : AlternatingItemTemplate(item))</span><br />
115+
OnItemDataBound.InvokeAsync(new ListViewItemEventArgs(item));
116+
even = !even;
117+
first = false;
117118

118-
}
119-
}
119+
}
120+
OnDataBound.InvokeAsync(EventArgs.Empty);
121+
}
120122

121-
@if (FooterTemplate != null && ShowFooter)
122-
{
123+
@if (FooterTemplate != null && ShowFooter)
124+
{
123125

124-
<span class="@FooterStyle.CssClass" style="@FooterStyle">@FooterTemplate</span><br />
126+
<span class="@FooterStyle.CssClass" style="@FooterStyle">@FooterTemplate</span><br />
125127

126-
}
128+
}
127129

128130

129131

130-
</span>
132+
</span>
131133

132-
break;
134+
break;
133135

134-
}
136+
}
135137

136-
}
138+
}

0 commit comments

Comments
 (0)