.NET 三层datalist嵌套,如何给最内层的datalist绑定数据?

Astolfou 2021-07-06 14:31:28

前台如下:

<body>
    <form id="form1" runat="server">
        <div>
        </div>
        <asp:DataList ID="dlImage" runat="server" OnItemDataBound="dlImageDataBound" RepeatColumns="5" RepeatDirection="Horizontal">
            <ItemTemplate>
                <div style="border:lpx solid black">
                    <br />
                    <asp:DataList ID="dlRelationship" runat="server" Height="126px" Width="189px">
                        <ItemTemplate>
                            <asp:Label ID="lbIT_TID" runat="server"  Visible="false" Text='<%# Eval("IT_TID") %>' />
                            <asp:DataList ID="dlTags" runat="server" RepeatColumns="5" RepeatDirection="Horizontal" Height="93px" Width="237px">
                                <ItemTemplate>
                                    <span><%# Eval ("T_Name") %>
                                </ItemTemplate>
                            </asp:DataList>
                        </ItemTemplate>
                    </asp:DataList>
                    <asp:Image ID="Image1" runat="server" Height="172px" ImageUrl='<%# Eval("I_Data") %>' Width="182px" />
                    <br /><asp:Label ID="lbImageID" runat="server"  Visible="false" Text='<%# Eval("I_ID") %>' />描述:<span><%# Eval ("I_Description") %><br />作者:<span><%# Eval ("I_Creator") %><br />创作日期:<span><%# Eval ("I_CreativeDate") %><br />类型:<span><%# Eval ("I_Kind") %><br /><br /></div>
            </ItemTemplate>
        </asp:DataList>
    </form>
</body>

后台如下:

private void BindList()
    {
        dlImage.DataSource = imagesSrv.GetImages();
        dlImage.DataBind();
    }
    protected void dlImageDataBound(object sender, DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            DataList dl = null;
            Label labImageID = null;
            dl = (DataList)e.Item.FindControl("dlRelationship");
            dl.ItemDataBound += new System.Web.UI.WebControls.DataListItemEventHandler(dlRelationship_ItemDataBound);
            labImageID = (Label)e.Item.FindControl("lbImageID");
            string imageID = labImageID.Text.ToString();
            int iImageID = Convert.ToInt32(imageID);
            string commandText = "select * from IT";
            commandText = commandText + " Where IT_IID=" + iImageID;
            string connString = ConfigurationManager.ConnectionStrings["MyImageDataConnectionString"].ConnectionString;
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = connString;
            conn.Open();
            SqlDataAdapter myCommand = new SqlDataAdapter(commandText, conn);
            DataSet ds = new DataSet();
            myCommand.Fill(ds, "IT");
            conn.Close();
            dl.DataSource = ds.Tables["IT"]; 
            dl.DataBind();
        }
    }    
    protected void dlRelationship_ItemDataBound(object sender, DataListItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            DataList dl = null;
            Label labTagsID = null;
            dl = (DataList)e.Item.FindControl("dlTags");
            labTagsID = (Label)e.Item.FindControl("lbIT_TID");
            string tagsID = labTagsID.Text.ToString();
            int iTagsID = Convert.ToInt32(tagsID);
            string commandText = "select * from IT";
            commandText = commandText + " Where IT_TID=" + iTagsID;
            string connString = ConfigurationManager.ConnectionStrings["MyImageDataConnectionString"].ConnectionString;
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = connString;
            conn.Open();
            SqlDataAdapter myCommand = new SqlDataAdapter(commandText, conn);
            DataSet ds = new DataSet();
            myCommand.Fill(ds, "Tags");
            conn.Close();
            dl.DataSource = ds.Tables["Tags"]; ;
            dl.DataBind();
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindList();
        }
    }

自己做了三个表,图片表存储图片信息;标签表存储标签id和标签名;图片-标签表用来存储对应关系。

        经过测试,通过外层datalist的ItemDataBound可以为第二层的dlRelationship绑定数据,但是最内层的dlTags却会失效,网上查了下后用DataListItemEventHandler任然不行,跪求大佬帮助。

...全文
773 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
紫魂一号 2021-07-28
  • 打赏
  • 举报
回复

每个DataList 都有ItemDataBound事件吧。分别在事件里去绑定哈

低丶调 2021-07-07
  • 打赏
  • 举报
回复 1

ItemDataBound这个事件是每一条数据都会进来一次?如果图片有100个,会进来一百次来查这个IT表,然后it表如果有n条数据有继续循环的查....我的天这个代码简直了......

我的建议是里把这些数据最后放到一个对象里面(不要循环的访问db,这性能太差了)
类大致是这些字段
1.图片相关的属性(页面要绑定的那些)
2.对应的Tag的list

也就不用搞这么多dataList控件了,直接
dl.DataSource = 上面已经搞好的list;
dl.DataBind();

Astolfou 2021-07-07
  • 举报
回复
@低丶调 谢谢大佬指导
低丶调 2021-07-06
  • 打赏
  • 举报
回复

我把你的代码跑了一下,最后的那个事件断点能进去的,你先把前端代码调整一下,然后再看吧

img

Astolfou 2021-07-06
  • 举报
回复
@低丶调 多谢大佬指教,但是把这些控件拖到第三层datalist中,要怎么给这三层绑定数据啊。。。一个datalist不是只能绑定一个数据表吗?标签和其他控件要调用的数据不在一张表里啊= =
低丶调 2021-07-06
  • 打赏
  • 举报
回复

--下面的前端代码是指什么?

img

这些数据绑定都是在 dlTags里面,需要移到他的templete里

低丶调 2021-07-06
  • 打赏
  • 举报
回复

而且你下面的这些前端代码,需要放到dlTags里面吧?你看一下你的标签层级

低丶调 2021-07-06
  • 打赏
  • 举报
回复 1

哇,2021了还有在用webForm的,哈哈
断点能进到 dl.DataSource = ds.Tables["Tags"]; 这一行吗?你看一下这个里面有没有数据

Astolfou 2021-07-06
  • 举报
回复
@低丶调 断点进不去,二层datalist的ItemDataBound函数没法启用。 下面的前端代码是指什么?我的三层datalist只负责显示指定标签名

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧