我設置了一個用戶控制用XML配置驅動的內有條件的內容。通過示例來解釋更容易。看看下面的配置片斷:如何創建一個數據綁定直放站
<node>
<text lbl="Text:"/>
<checkbox lbl="Check me:" checked="true"/>
</node>
我正在努力實現到片斷轉換成一個單一的文本框和一個複選框控制。當然,如果代碼片段包含更多節點,則會自動生成更多控件。
給任務的迭代性,我選擇使用中繼器。在它內部,我放置了兩個(以及更多,參見波紋管)控件,一個CheckBox和一個Editbox。爲了選擇哪個控件被激活,我使用了一個內聯開關命令,檢查當前配置節點的名稱。
可悲的是,這是行不通的。問題在於,在數據綁定發生之後很長一段時間內,交換機正在運行。這本身不會是一個問題,並不是因爲配置節點可能提供所需的信息來綁定數據。考慮一下如果複選框控件試圖綁定到上面代碼片段中的文本節點,絕望地尋找它的「checked」屬性會發生什麼。
任何想法如何實現這一目標?
感謝, 波阿斯
這裏是我當前的代碼:
這裏是我的代碼(上面一個更復雜的語法比一個運行):
<asp:Repeater ID="settingRepeater" runat="server">
<ItemTemplate>
<%
switch (((XmlNode)Page.GetDataItem()).LocalName)
{
case "text":
%>
<asp:Label ID="settingsLabel" CssClass="editlabel" Text='<%# XPath("@lbl") %>' runat="server" />
<asp:TextBox ID="settingsLabelText" Text='<%# SettingsNode.SelectSingleNode(XPath("@xpath").ToString()).InnerText %>'
runat="server" AutoPostBack="true" Columns='<%# XmlUtils.OptReadInt((XmlNode)Page.GetDataItem(),"@width",20) %>'
/>
<% break;
case "checkbox":
%>
<asp:CheckBox ID="settingsCheckBox" Text='<%# XPath("@lbl") %>' runat="server"
Checked='<%# ((XmlElement)SettingsNode.SelectSingleNode(XPath("@xpath").ToString())).HasAttribute(XPath("@att").ToString()) %>'
/>
<% break;
} %>
</ItemTemplate>
</asp:Repeater>