乌大维 2014-09-03 03:25 采纳率: 0%
浏览 739

datalist嵌套外层大类反复出现

我想要的效果是一门课程里面有很多微课,这门课程只出现一次,但是用了datalist后,该课程名称多次出现,有什么办法可以让课程名会出现一次吗?
前台代码:

<asp:DataList ID="dlFileType" RepeatColumns="1" runat="server" OnItemDataBound="dlFileType_ItemDataBound">
    <ItemTemplate>
        <table border="0" cellspacing="0" cellpadding="0">
            <tr>
                <td width="22%" height="88" align="center" valign="top">
                    <img src='/images/users/Session["yonghuID"]/<%#DataBinder.Eval(Container.DataItem, "kcFengmianURL")%>'
                        width="80" height="80">
                </td>
                <td valign="top">
                    <table width="96%" border="0" cellpadding="0" cellspacing="0">
                        <tr width="100%">
                            <td colspan="2">
                                <%#DataBinder.Eval(Container.DataItem,"kcBiaoti") %>
                                <asp:Label ID="labFileType" runat="server" Visible="true" Text='<%# DataBinder.Eval(Container.DataItem,"kechengID")%>'></asp:Label>
                            </td>
                        </tr>
                        <tr>
                            <td width="300">
                                <asp:DataList ID="dlFileList" runat="server" RepeatColumns="1" Width="100%">
                                    <ItemTemplate>
                                        <table cellspacing="1" cellpadding="1" width="100%" border="0">
                                            <tr>
                                                <td width="93%">
                                                    <font color="#393939">
                                                        <%-- <%#GetTitle((string)Convert.ToString(DataBinder.Eval(Container.DataItem, "cnvcTitle")),(string)Convert.ToString(DataBinder.Eval(Container.DataItem, "cnvcFileType")),(string)Convert.ToString(DataBinder.Eval(Container.DataItem, "cniBaseFileID")),(DateTime)DataBinder.Eval(Container.DataItem, "cndtPublishTime"))%>--%>
                                                        <%#DataBinder.Eval(Container.DataItem,"wkBiaoti") %>

                                                    </font>
                                                </td>
                                            </tr>
                                        </table>
                                    </ItemTemplate>
                                </asp:DataList>
                            </td>
                        </tr>
                    </table>
                </td>
            </tr>
        </table>
    </ItemTemplate>
</asp:DataList>

后台代码

       protected void Page_Load(object sender, EventArgs e)
    {
        binddata();
    }
    public void binddata()
    {

        string sqlSel = "select * from kechengXIAweikes ";          
        dlFileType.DataSource = operateData.getRows(sqlSel);
        dlFileType.DataBind();

    }

    protected void dlFileType_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            DataList dl = null;
            Label labTypeID = null;

            dl = (DataList)e.Item.FindControl("dlFileList");//在datalist中查找ID为dlfilelist的datalist,赋值给dl
            labTypeID = (Label)e.Item.FindControl("labFileType");//找到文件类型ID
            string typeID = labTypeID.Text.ToString();
            int iTypeID = Convert.ToInt32(typeID);
            string commandText = "select * from kechengXIAweikes";
            commandText = commandText + " Where kechengID=" + iTypeID;
            //------------
            string connString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = connString;
            conn.Open();
            SqlDataAdapter myCommand = new SqlDataAdapter(commandText, conn);
            DataSet ds = new DataSet();
            myCommand.Fill(ds, "kechengXIAweikes");
            conn.Close();
            //------------
            dl.DataSource = ds.Tables["kechengXIAweikes"]; ;
            dl.DataBind();
        }
    }

不知道描述的清不清楚,欢迎讨论。

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 13:46
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要解决这个问题,您可以尝试以下步骤:

    1. 使用DataSource属性和RepeatColumns属性将数据列表中的每一项都关联到一个外部数据源。这样,您就可以在一个地方更新数据源,而不会影响到数据列表本身。

    2. 通过设置DataSource属性来获取外部数据源的返回值,并将其绑定到数据列表。

    3. 在处理每条记录时,检查它是否已经在数据列表中存在。如果已经存在,则跳过此行,以避免重复显示相同的记录。

    4. 如果记录不存在于外部数据源中,则添加新的记录到数据列表。

    5. 将上述代码合并到您的页面代码中,并确保正确地使用DataSourceRepeatColumns属性。

    以下是修改后的代码示例:

    <asp:DataList ID="dlFileType" RepeatColumns="1" runat="server" OnItemDataBound="dlFileType_ItemDataBound">
        <ItemTemplate>
            <table border="0" cellspacing="0" cellpadding="0">
                <tr>
                    <td width="22%" height="88" align="center" valign="top">
                        <img src='/images/users/Session["yonghuID"]/<%#DataBinder.Eval(Container.DataItem, "kcFengmianURL")%>'
                            width="80" height="80">
                    </td>
                    <td valign="top">
                        <table width="96%" border="0" cellpadding="0" cellspacing="0">
                            <tr width="100%">
                                <td colspan="2">
                                    <%#DataBinder.Eval(Container.DataItem,"kcBiaoti") %>
                                    <asp:Label ID="labFileType" runat="server" Visible="true" Text='<%# DataBinder.Eval(Container.DataItem,"kechengID")%>'></asp:Label>
                                </td>
                            </tr>
                            <tr>
                                <td width="300">
                                    <asp:DataList ID="dlFileList" runat="server" DataSource='<%# dlFileType.DataSource %>' RepeatColumns="1" Width="100%">
                                        <ItemTemplate>
                                            <table cellspacing="1" cellpadding="1" width="100%" border="0">
                                                <tr>
                                                    <td width="93%">
                                                        <font color="#393939">
                                                            <%#DataBinder.Eval(Container.DataItem,"wkBiaoti") %>
    
                                                        </font>
                                                    </td>
                                                </tr>
                                            </table>
                                        </ItemTemplate>
                                    </asp:DataList>
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>
        </ItemTemplate>
    </asp:DataList>
    
    public void binddata()
    {
        string sqlSel = "select * from kechengXIAweikes ";  
        dlFileType.DataSource = operateData.getRows(sqlSel);  
        dlFileType.DataBind();  
    }
    
    protected void dlFileType_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            DataList dl = null;
            Label labTypeID = null;
    
            dl = (DataList)e.Item.FindControl("dlFileList"); // 在datalist中查找ID为dlfilelist的datalist,赋值给dl
            labTypeID = (Label)e.Item.FindControl("labFileType");
    
            string typeID = labTypeID.Text.ToString();
            int iTypeID = Convert.ToInt32(typeID);
    
            string commandText = "select * from kechengXIAweikes where kechengID=" + iTypeID;
            //-----------
            string connString = System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = connString;
            conn.Open();
            SqlDataAdapter myCommand = new SqlDataAdapter(commandText, conn);
            DataSet ds = new DataSet();
            myCommand.Fill(ds, "kechengXIAweikes");
            conn.Close();
            //-----------
            dl.DataSource = ds.Tables[0]; 
            dl.DataBind();
        }
    }
    

    这个解决方案应该能解决您的问题。希望这对您有所帮助!

    评论

报告相同问题?