リストを動的にププレートし、カスタム コントロールを使用する asp リピーターにバインドしたいと思います。
これが私のカスタム コントロール (.acsx ファイル) です。
<%@ Control Language="VB" ClassName="ControlCar" %>
<script runat="server">
Private m_car As Car = Nothing
Public Property Car() As Car
Get
Car= m_car
End Get
Set(ByVal value As Car)
m_car = value
End Set
End Property
Protected Sub Panel_OnLoad(ByVal sender As Object, ByVal e As System.EventArgs)
If Me.m_car Is Nothing Then
lit_color.Text = "(m_car Is Nothing)"
Else
lit_color.Text = "color of Me.m_car is (" & Me.m_car.Color & ")"
End If
End Sub
</script>
<asp:Panel ID="panel" OnLoad="Panel_OnLoad" runat="server">
this is a car<br />
color = <asp:Literal ID="lit_color" runat="server"></asp:Literal><br />
<br />
</asp:Panel>
そこで、aspx ファイルにリピーターを作成します。
<%@ Register TagPrefix="uc" TagName="ControlCar" Src="myfile.ascx" %>
<asp:Repeater ID="id_repeater" runat="server">
<headertemplate>
</headertemplate>
<itemtemplate>
<uc:ControlCar id="ControlCarTemplate" Car=<%# CType(Container.DataItem, Car)%> runat="server" />
</itemtemplate>
</asp:Repeater>
リピータを移入するリストが宣言されています:
Private Shared list_cars As ArrayList
LoadPage イベントで、リストに 1 つの項目を追加します。
If IsPostBack Then
Return
End If
list_cars = New ArrayList()
Dim car As Car = New Car
car.Color = "red"
list_cars .Add(car)
id_repeater.DataSource = list_cars
id_repeater.DataBind()
ページを表示すると、これが正しく表示されます:
これは車です
color = Me.m_car の色は (赤)
OK、ロードページイベントで正常に動作します
しかし今、ここで定義されたボタンクリックイベントにアイテムを追加したい:
Sub OnClickAdd(ByVal sender As Object, ByVal e As System.EventArgs)
Dim car = New Car
car.Color = "blue"
list_cars.Add(car)
id_repeater_products.DataSource = list_cars
id_repeater_products.DataBind()
End Sub
クリックイベントで、次のことがわかりました:
これは車です
color = (m_car はなし)
これは車です
color = (m_car はなし)
動作しません。Container.DataItem は Nothing 値だと思います。ページをロードするときだけの良いインスタンスです。
修正方法がわかりません。