想实现以上的功能,先显示所有会员(会员表Member)然后显示每个会员的照片(照片表Media).
先说说我做到现在的情况我用asp:repeater控件绑定数据
在后台写了一个SQL语句select * from media left join member on member.hyid = media.hyid
但是这样会查询出所有照片数据,比如说10022的会员有多张照片,那么它会循环多个.
请问有什么好办法吗?或者思路?

解决方案 »

  1.   

    你现在就是查询数据多,怕循环多,性能滴,速度慢嘛
    我是说可以用分页控件,如果你不分页那就可以不用啊,还有sql最好别写 select * from xx
      

  2.   

    SQL修改一下,不知道可行不,每组数据只输出一条,
    SELECT DISTINCT ...
      FROM member ...
      LEFT JOIN media ... 
      

  3.   

    直接取第一行就好了
    SQL语句中加个top 1 看看
      

  4.   

    。。 你问题里没说有重复啊
    那就是你sql写的有问题,优化下
      

  5.   

    Repeater嵌套绑定
    aspx代码:<table border="0" cellpadding="0" cellspacing="0" style="margin-bottom: 5px" width="100%">
        <asp:Repeater runat="server" ID="rptypelist" OnItemDataBound="rptypelist_ItemDataBound">
            <ItemTemplate>
                <tr>
                    <td class="fb">
                        &nbsp;&nbsp;<a href="Lists.aspx?Qtid=<%#Eval("qtid") %>"><%#Eval("qtypename") %></a> <span id="askCount_15"
                            class="date2">[<%#Eval("typecount")%>]</span>
                    </td>
                </tr>
                <tr>
                    <td>
                        <div id="askTop2_15" class="ask_list">
                            <asp:Repeater runat="server" ID="rpquestionlist">
                                <ItemTemplate>
                                    <a href="Question.aspx?qid=<%#Eval("liftquestionid")%>">
                                        <%#Eval("questiontitle")%></a><br />
                                </ItemTemplate>
                            </asp:Repeater>
                        </div>
                    </td>
                </tr>
            </ItemTemplate>
        </asp:Repeater>
    </table>
     cs代码:
    private void RpTypeBind()
            {//GetQuestionTypeAndCount() 返回一个datatable
                this.rptypelist.DataSource = LiftQuestionCtr.GetQuestionTypeAndCount();                   
                this.rptypelist.DataBind();
            }
                   protected void rptypelist_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {//判断里层repeater处于外层repeater的哪个位置( AlternatingItemTemplate,FooterTemplate,//HeaderTemplate,,ItemTemplate,SeparatorTemplate)
                if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
                {
                    Repeater rep = e.Item.FindControl("rpquestionlist") as Repeater;//找到里层的repeater对象
                    DataRowView rowv = (DataRowView)e.Item.DataItem;//找到分类Repeater关联的数据项 
                    int typeid = Convert.ToInt32(rowv["qtid"]); //获取填充子类的id 
                    rep.DataSource = LiftQuestionCtr.GetSomeQuestionsByTypeid(typeid, 2);
                    rep.DataBind();
                }
            }
      

  6.   


    "top 1"
    我感觉可能不合适,
    楼主是要为每个成员取一个图片,top 1的话就只取一条数据了说地不对的地方请见谅!
      

  7.   


    非常感谢!您的答案应该就是我要的,我根据你的代码修改,报了一个错,请问是为什么?
     DataRowView rowv = (DataRowView)e.Item.DataItem;无法将类型为“HMO.Models.Member”的对象强制转换为类型“System.Data.DataRowView”。
      

  8.   

    repeater里的不是DataRowView 这个是GridView里的
      

  9.   

    你要的无非是获取会员的ID,你把会员ID绑定到Label(设置隐藏)上,再到后台获取这个Label的Text就可以啦还有 repeater最好别用if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
      我经常用这个老报错,最后我直接用选好搞定的
     for (int iss = 0; iss < rpOtherLeaderStat.Items.Count; iss++)
                {
                    Label lblName = rpOtherLeaderStat.Items[iss].FindControl("lblName") as Label;
    }
      

  10.   

    没有图片你说的意思是 一个会员下 可以显示多张图片。那么你就直接用repeater显示这个会员的 图片list就可以了哇
      

  11.   

    是的!
    我开始的方法是这样去做的.
    前台 <asp:Repeater ID="dgvPhoto" runat="server" OnItemDataBound="dgvPhoto_ItemDataBound">
            <ItemTemplate>
                <table cellspacing="0" class="htmain">
                    <tr>
                        <td class="tdd" align="left" colspan="6">
                            &nbsp;&nbsp;姓名:<%#Eval ("pet_name") %>&nbsp;&nbsp;性别:<%#Eval ("sexs") %>&nbsp;&nbsp;年纪:<%#Eval ("age") %>&nbsp;&nbsp;体重:<%#Eval ("weight") %>&nbsp;&nbsp;身高:<%#Eval ("height") %>
                        </td>
                    </tr>
                    <tr bgcolor="#f5f5f5">
                    <%
                            System.Collections.Generic.IList<HMO.Models.Media> medialist = ShowPhoto(Eval("hyid"));
                            foreach (HMO.Models.Media medias in medialist)
                            {
                                <td>
                                    <br />
                                    <img src='../../images/<%=medias.uprul %>' width="113" height="140" alt="lovegw" /><br />
                                    图片大小:<%=medias.size %><br />
                                    <label>
                                        <input type="button" value="通  过" /></label>
                                    <label>
                                        <input type="button" value="删  除" /></label>
                                </td>
                            </ItemTemplate>
                        </asp:Repeater>
                        <%} %>
                    </tr>
                </table>
            </ItemTemplate>
        </asp:Repeater>后台 if(!ispost)
    {
     dgvPhoto.DataSource = memberManager.MemberSelectAll();
                pds.DataSource = dgvPhoto.DataSource as List<Member>;
                pds.AllowPaging = true;
                pds.PageSize = 1;
                this.AspNetPager1.RecordCount = pds.DataSourceCount;
                this.AspNetPager1.PageSize = pds.PageSize;
                pds.CurrentPageIndex = 0;
                dgvPhoto.DataSource = pds;
                dgvPhoto.DataBind();
    }
         public IList<Media> ShowPhoto(object hyid)
        {
            int status = 1;
           string type = "相册";
            int media_hyid = Convert.ToInt32(hyid);
           IList<Media> medialist = mediaManager.MediaSelectByhyidID(media_hyid, type, status);
           return medialist;
        }
    但这样写会报个错!
    Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用。
    ShowPhoto(Eval("hyid"));
    那又请问如何解决呢?
      

  12.   

    少了个#啊   '<%# Eval("hyid")%>'
      

  13.   


    首先非常感谢你的在线回答!
    你说说ShowPhoto('<%# Eval("hyid")%>);这样吗?
    你把我的那段代码试试...
    加个#试试?
      

  14.   

    无语
    如果ShowPhoto是后台的方法的话
    绑定是这样的:'<%# ShowPhoto(Eval("hyid"))%>'
    签名我写的只是参考