使用DataSet和Repeater嵌套的CheckBoxList

时间:2016-10-06 00:59:34

标签: asp.net c#-4.0

我正在尝试使用转发器和数据集连接一些CBL。数据集包含2个具有相同模式和(单个)关系的表(在SQL中将其视为自连接)。

当我设置DataSource =关系时,如果呈现控件,我可以显示子元素;所以我知道模型很好,虽然放错了地方(故意测试模型 - 见下面的代码)。

问题是:

  1. 我很难让父元素显示出来
  2. 并非所有父母都有孩子,而且还不需要出现的孩子
  3. 我是否以正确的心态接近了这一点?即我错过了一些基本的东西吗? CBL之外的实现(纯文本)工作正常per this article

    <asp:Repeater ID="ParentRepeater" runat="server">
          <ItemTemplate>
                <asp:CheckBoxList ID="ParentCBL" runat="server"
                 DataSource='<%# DataBinder.Eval(Container.DataItem,"Joined") %>'
                 DataTextField="TextProperty" 
                 DataValueField="ValueProperty">
               </asp:CheckBoxList>
               <asp:Repeater ID="ChildRepeater" runat="server">
                   <ItemTemplate>
                       <asp:CheckBoxList ID="ChildCBL" runat="server"
                        DataSource='<%# DataBinder.Eval(Container.DataItem, "Joined") %>'
                        DataTextField="TextProperty" 
                        DataValueField="ValueProperty">
                      </asp:CheckBoxList>
                   </ItemTemplate>
              </asp:Repeater>
         </ItemTemplate>
     </asp:Repeater>
    
  4. 页面加载不是什么壮观的

    DataSet ds = Foo.foo();
    ParentRepeater.DataSource = ds.Tables["Parent"];
    ParentRepeater.DataBind();
    

1 个答案:

答案 0 :(得分:0)

  1. 在您的代码中,您不能绑定 ChildRepeater
  2. 如果您只想根据https://support.microsoft.com/en-us/kb/306154将纯文本更改为Checkbox 那么你不需要使用CheckBoxList。但是你应该只使用转发器内的单个复选框。