使用DataList吧,DataList可以实现上述功能。

解决方案 »

  1.   

    我觉得用treeview显示都可以。
      

  2.   

    eyestrong(有时爱情图有虚名):
    DataList可以实现循环嵌套吗?因为这里面实际上有三层循环[大类->大子类->栏目],而且最后还要取到多选按钮的所有选择值,还要判断大类已选的项目小类不用再选。如点选了大子类“国际新闻”前的按钮后,“国际军事”等均不可选。littlechang(小常) :
    TreeView是应该可以,但实际起来好像需要框架或IFrame,与我现在的版面要求不太合。谢谢两位!
      

  3.   

    建议使用UltraWebTree,可以实现,很方便。
      

  4.   

    我试过用DataList:
    当不嵌套时:
    <!--这里是第一层-->   
    <asp:DataList Runat="server" id="DLExampleNewsCate" CellPadding="3" Width=500 HorizontalAlign="Center" DataKeyField="BigCateID" border="1" GridLines="Both">  
    <ItemTemplate>  
    <FIELDSET style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 9pt;
    BORDER-LEFT: 1px solid; WIDTH: 100%; BORDER-BOTTOM: 1px solid; FONT-FAMILY: 宋体; TEXT-ALIGN: left">
    <LEGEND align=left>
    <asp:CheckBox id="NewsCateCB" runat="Server" Value='<%# DataBinder.Eval(Container.DataItem,"BigCateID")%>' Text='<%# DataBinder.Eval(Container.DataItem, "NewscateCnName")%>' />
     </LEGEND>
     
    </FIELDSET>
    </ItemTemplate>
    </asp:DataList>
    <!--第一层-----结束--> <!--这里是第二层-----开始-->
    <asp:DataList Runat="server" id="DLExampleArticleParentType" CellPadding="3" Width="500" HorizontalAlign="Center"
     DataKeyField="ArticleParentTypeID" border="1" GridLines="Both">  
    <ItemTemplate>  
    <FIELDSET style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 9pt; 
    BORDER-LEFT: 1px solid; WIDTH: 90%; BORDER-BOTTOM: 1px solid; FONT-FAMILY: 宋体; TEXT-ALIGN: left"
     align=center>
    <LEGEND align=left>
    <asp:CheckBox id='ArticleParentTypeCB' runat='Server'
     Value='<%# DataBinder.Eval(Container.DataItem, "TypeID")%>' 
      Text='<%# DataBinder.Eval(Container.DataItem, "ArticleParentTypeName")%>' />
    </LEGEND>


    </FIELDSET>
    </ItemTemplate>
    </asp:DataList>
    <!--第二层-----结束--> <!--这里是第三层------开始-->
    <asp:DataList Runat="server" id="DLExampleArticleType" CellPadding="3" Width=500 HorizontalAlign="Center"
     DataKeyField="ArticleTypeID" border="1" GridLines="Both">  
    <ItemTemplate>
    <asp:CheckBox id='ArticleTypeCB' runat='Server' 
     Value='<%# DataBinder.Eval(Container.DataItem, "TypeID")%>' 
      Text='<%# DataBinder.Eval(Container.DataItem, "TypeName")%>' />
    </ItemTemplate>
    </asp:DataList>
    <!--这里是第三层------结束-->
    这样可以得到记录结果,但达不到上述效果。
    如果用嵌套:
    <!--这里是第一层-->   
    <asp:DataList Runat="server" id="DLExampleNewsCate" CellPadding="3" Width=500 HorizontalAlign="Center" DataKeyField="BigCateID" border="1" GridLines="Both">  
    <ItemTemplate>  
    <FIELDSET style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 9pt;
    BORDER-LEFT: 1px solid; WIDTH: 100%; BORDER-BOTTOM: 1px solid; FONT-FAMILY: 宋体; TEXT-ALIGN: left">
    <LEGEND align=left>
    <asp:CheckBox id="NewsCateCB" runat="Server" Value='<%# DataBinder.Eval(Container.DataItem,"BigCateID")%>' Text='<%# DataBinder.Eval(Container.DataItem, "NewscateCnName")%>' />
     </LEGEND>
     
    <!--这里是第二层-----开始-->
    <asp:DataList Runat="server" id="DLExampleArticleParentType" CellPadding="3" Width="500" HorizontalAlign="Center"
     DataKeyField="ArticleParentTypeID" border="1" GridLines="Both">  
    <ItemTemplate>  
    <FIELDSET style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 9pt; 
    BORDER-LEFT: 1px solid; WIDTH: 90%; BORDER-BOTTOM: 1px solid; FONT-FAMILY: 宋体; TEXT-ALIGN: left"
     align=center>
    <LEGEND align=left>
    <asp:CheckBox id='ArticleParentTypeCB' runat='Server'
     Value='<%# DataBinder.Eval(Container.DataItem, "TypeID")%>' 
      Text='<%# DataBinder.Eval(Container.DataItem, "ArticleParentTypeName")%>' />
    </LEGEND>

    <!--这里是第三层------开始-->
    <asp:DataList Runat="server" id="DLExampleArticleType" CellPadding="3" Width=500 HorizontalAlign="Center"
     DataKeyField="ArticleTypeID" border="1" GridLines="Both">  
    <ItemTemplate>
    <asp:CheckBox id='ArticleTypeCB' runat='Server' 
     Value='<%# DataBinder.Eval(Container.DataItem, "TypeID")%>' 
      Text='<%# DataBinder.Eval(Container.DataItem, "TypeName")%>' />
    </ItemTemplate>
    </asp:DataList>
    <!--这里是第三层------结束-->

    </FIELDSET>
    </ItemTemplate>
    </asp:DataList>
    <!--第二层-----结束-->

    </FIELDSET>
    </ItemTemplate>
    </asp:DataList>
    <!--第一层-----结束-->嵌套时连记录结果也没有?不知为什么DataList不能嵌套?
      

  5.   

    请问使用XML解决类似问题的方案?
    解决者80分全给他!
      

  6.   

    使用TreeView,我已email给你,请查收。
      

  7.   

    用datalist吧,他的格式比较灵活。可能会好做一些
      

  8.   

    用xml + xslt:
    首先把你的三张表读入DataSet,
    再用DataSet生成xml,然后绑定到你的xslt,生成html。
    比如你的DataSet生成的xml如下(你不一定要写入文件,内存中处理即可):NewsCate.xml
    *************************************************<?xml version="1.0" encoding="utf-8" ?>
    <?xml-stylesheet type="text/xsl" href="NewsCate.xslt" ?>
    <NewsCate>
    <NewsCateItem value="报纸新闻">
    <ArticleParentTypeItem value="国际新闻">
    <ArticleTypeItem value="国际要闻"/>
    <ArticleTypeItem value="国际社会"/>
    <ArticleTypeItem value="国际时事"/>
    <ArticleTypeItem value="国际军事"/>
    </ArticleParentTypeItem>
    <ArticleParentTypeItem value="国内新闻">
    <ArticleTypeItem value="国内要闻"/>
    <ArticleTypeItem value="国内社会"/>
    <ArticleTypeItem value="国内时事"/>
    <ArticleTypeItem value="国内军事"/>
    </ArticleParentTypeItem>
    <ArticleParentTypeItem value="其他新闻">
    <ArticleTypeItem value="其他要闻"/>
    <ArticleTypeItem value="其他dgfdg"/>
    </ArticleParentTypeItem>
    </NewsCateItem><NewsCateItem value="即时新闻">
    <ArticleParentTypeItem value="国际新闻">
    <ArticleTypeItem value="国际要闻"/>
    <ArticleTypeItem value="国际社会"/>
    <ArticleTypeItem value="国际时事"/>
    <ArticleTypeItem value="国际军事"/>
    </ArticleParentTypeItem>
    <ArticleParentTypeItem value="国内新闻">
    <ArticleTypeItem value="国内要闻"/>
    <ArticleTypeItem value="国内社会"/>
    <ArticleTypeItem value="国内时事"/>
    <ArticleTypeItem value="国内军事"/>
    </ArticleParentTypeItem>
    <ArticleParentTypeItem value="其他新闻">
    <ArticleTypeItem value="其他要闻"/>
    <ArticleTypeItem value="其他dgfdg"/>
    </ArticleParentTypeItem>
    </NewsCateItem><NewsCateItem value="专题新闻">
    <ArticleParentTypeItem value="国际新闻">
    <ArticleTypeItem value="国际要闻"/>
    <ArticleTypeItem value="国际社会"/>
    <ArticleTypeItem value="国际时事"/>
    <ArticleTypeItem value="国际军事"/>
    </ArticleParentTypeItem>
    <ArticleParentTypeItem value="国内新闻">
    <ArticleTypeItem value="国内要闻"/>
    <ArticleTypeItem value="国内社会"/>
    <ArticleTypeItem value="国内时事"/>
    <ArticleTypeItem value="国内军事"/>
    </ArticleParentTypeItem>
    <ArticleParentTypeItem value="其他新闻">
    <ArticleTypeItem value="其他要闻"/>
    <ArticleTypeItem value="其他dgfdg"/>
    </ArticleParentTypeItem>
    </NewsCateItem>
    </NewsCate>
    *************************************************NewsCate.xslt
    *************************************************
    <?xml version="1.0" encoding="gb2312" ?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output indent="no" method="html"/><xsl:template match="/NewsCate">
    <xsl:apply-templates select="NewsCateItem"/>
    </xsl:template>
    <xsl:template match="NewsCateItem">
    <FieldSet>
    <Legend>
    <xsl:value-of select="@value"/>
    </Legend>
    <xsl:apply-templates select="ArticleParentTypeItem"/>
    </FieldSet>
    </xsl:template><xsl:template match="ArticleParentTypeItem">
    <FieldSet>
    <Legend>
    <xsl:value-of select="@value"/>
    </Legend>
    <Legend>
    <xsl:apply-templates select="ArticleTypeItem"/>
    </Legend>
    </FieldSet>
    </xsl:template><xsl:template match="ArticleTypeItem">
        <input type="checkbox" value="{@value}" ID="'checkbox' + {position()}"/>
        <xsl:value-of select="@value"/>       
    </xsl:template>
    </xsl:stylesheet>
    ***********************************************************************
    把这两个文件保存在一个地方,在IE中打开NewsCate.xml,可以看到效果.
      

  9.   

    你最好在server端执行xslt转换;
    写一个web custom control,在Render方法中输出转换结果;