小弟最近在做毕业设计,我们指导老师要求首页列出论坛的板块,而且每个版块都得有最新的几个帖子,还要求管理员能增加、删除、屏蔽板块!我用datalist能列出每个版块,也能增删,但是不能列出每个班块的最新帖子。说明白点就是首页分不同的板块显示,每个版块有其最新的几个帖子,而且管理员能增删屏。这些天都在弄这个就是弄不出来,麻烦各位大师帮忙看看,我用什么控件好,要怎样才能实现。麻烦大师们说清楚点,我是个菜鸟,么办法毕业设计啊!!谢谢各位大师了,小第几了好多天的…………

解决方案 »

  1.   

    datalist可以嵌套使用。外层的放版块信息,里层的放相关版块的帖子信息
      

  2.   

    里层的帖子信息绑定数据在 外层控件的 ItemDataBound事件中写
      

  3.   

    我当时想的是datalist嵌套Gridview使用,datalist做板块信息,Gridview做帖子信息,但是我不知道Gridview该怎么编辑了!你的意思是里外都是datalist,我试试看,我是个菜鸟,还不熟悉这些,你能再说清楚一点吗……???
      

  4.   


    根据你这“三点”进行分析:说明白点就是首页分不同的板块显示,每个版块有其最新的几个帖子,而且管理员能增删屏。第一:说明白点就是首页分不同的板块显示版块:id bkName1  A版块
    2  B版块在首页时候应该知道怎么查询了吧。第二:每个版块有其最新的几个帖子帖子:id tzTitle  bkId  bTime1  哈哈      1     时间2  呵呵      2     时间3  飘过~    1     时间
    string sql = "select top 3 * from 帖子 where bkId =" + bId + "order by bTime desc";这里要说明下需要用到2个datalist的嵌套,就是帖子嵌套进版块bId 指的就是 版块的Id,在datalist1 做个隐藏域 ,在绑定版块的时候绑定如:  <asp:HiddenField ID="HiddenField1" runat="server" Value='<%#Eval("Id") %>' />      
    datalist2 的ItemDataBound事件里 在写:取到隐藏域的值。。bIdstring sql = "select top 3 * from 帖子 where bkId =" + bId + "order by bTime desc";接着绑定数据,dataset 这里和绑定A版块一样的了。
    第三:而且管理员能增删屏。增删屏应该会了吧insert intodelete屏:给帖子加一个字段,正常贴子假设是0 屏蔽后是1.打完收工
      

  5.   


    你的这种方法我试了一下么有成功,可能是我哪里没弄好!我的一种方法是:datalist里面在放一个datalist,利用外层datalist的ItemDataBound绑定内层的datalist。但是我又遇到一个问题就是帖子表中有多个帖子板块的Id相同时,首页同一个板块就有多个,这个我又不知道该怎么弄了!!!
      public void aa()
        {
            //string MdId = Request["MdId"];
            SqlConnection con = DB.createDB();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            con.Open();
            SqlDataAdapter sda = new SqlDataAdapter("select * from tb_Module", con);
            DataSet ds = new DataSet();
            sda.Fill(ds, "tb_Module");
            this.DataList1.DataSource = ds;
            this.DataList1.DataKeyField =  "MdId" ;
            this.DataList1.DataBind();      
            con.Close();
        }
     public void pagebind()
        {
            string MdId = Request["MdId"];
            int curpage = Convert.ToInt32(this.lblPage.Text);
            PagedDataSource ps = new PagedDataSource();
            SqlConnection con = DB.createDB();
            con.Open();
            SqlDataAdapter sda = new SqlDataAdapter("select  DISTINCT  a.*,b.* from tb_Content as a  join tb_Module as b on a.MdId=b.MdId order by b.MdId,a.CreateTime ", con);
            DataSet ds = new DataSet();
            sda.Fill(ds, "tb_Content");
            ps.DataSource = ds.Tables["tb_Content"].DefaultView;
            ps.AllowPaging = true;
            ps.PageSize = 3;
            ps.CurrentPageIndex = curpage - 1;
            this.lnkbtnUp.Enabled = true;
            this.lnkbtnNext.Enabled = true;
            this.lnkbtnLast.Enabled = true;
            this.lnkbtnOne.Enabled = true;
            if (curpage == 1)
            {
                this.lnkbtnOne.Enabled = false;//不显示第一页按钮
                this.lnkbtnUp.Enabled = false;//不显示上一页按钮
            }
            if (curpage == ps.PageCount)
            {
                this.lnkbtnNext.Enabled = false;//不显示下一页
                this.lnkbtnLast.Enabled = false;//不显示最后一页
            }
            this.lblBackPage.Text = Convert.ToString(ps.PageCount);
            this.DataList1.DataSource = ps;
            this.DataList1.DataKeyField = "ContId";
            this.DataList1.DataBind();
            con.Close();
        }
     protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            DataList datalist2;
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                datalist2 = e.Item.FindControl("DataList2") as DataList;
                if (datalist2 != null)
                {
                    SqlConnection con1 = DB.createDB();
                    SqlCommand cmd1 = new SqlCommand();
                    cmd1.Connection = con1;
                    con1.Open();
                    SqlDataAdapter da1 = new SqlDataAdapter("select * from tb_Content where MdId = @MdId", con1);
                    da1.SelectCommand.Parameters.AddWithValue("@MdId", (e.Item.DataItem as DataRowView)["MdId"]);
                    DataSet ds = new DataSet();
                    da1.Fill(ds);
                    datalist2.DataSource = ds.Tables[0].DefaultView;
                    datalist2.DataBind();
                    con1.Close();
                }
            }
        }这是我的代码!应该是分页那里面的select不严谨才会出现这个问题的,大师看看能不能帮小弟改一改!
      

  6.   

    你应该只查询前面3条数据,你把全部查出来了,请确保mid是板块idSqlDataAdapter da1 = new SqlDataAdapter("select * from tb_Content where MdId = @MdId", con1);
      

  7.   

    你应该只查询前面3条数据,你把全部查出来了,请确保mid是板块idSqlDataAdapter da1 = new SqlDataAdapter("select * from tb_Content where MdId = @MdId", con1);
      

  8.   

    最终结果:
    代码:
        protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
        {        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {            DataList dList = e.Item.FindControl("DataList2") as DataList;            HiddenField hf = e.Item.FindControl("hf2") as HiddenField;            int bId = Convert.ToInt32(hf.Value.ToString());            DataSet ds = getBkzxtz(bId);            dList.DataSource = ds;            dList.DataBind();
                
            }
        }    public DataSet getBkzxtz(int bId)
        {        string sql = "select top 3 * from tz where bkId=" + bId + "order by tzTime desc";        SqlConnection sqlcon = new SqlConnection(Db.cslt);        sqlcon.Open();        SqlDataAdapter adp = new SqlDataAdapter(sql, sqlcon);        DataSet ds = new DataSet();        adp.Fill(ds);        return ds;
        }
      

  9.   

    我用下面的方法也实现了这个功能:
     protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            DataList datalist2;
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                datalist2 = e.Item.FindControl("DataList2") as DataList;
                if (datalist2 != null)
                {
                    SqlConnection con1 = DB.createDB();
                    SqlCommand cmd1 = new SqlCommand();
                    cmd1.Connection = con1;
                    con1.Open();
                    SqlDataAdapter da1 = new SqlDataAdapter("select * from tb_Content where MdId = @MdId", con1);
                    da1.SelectCommand.Parameters.AddWithValue("@MdId", (e.Item.DataItem as DataRowView)["MdId"]);
                    DataSet ds = new DataSet();
                    da1.Fill(ds);
                    datalist2.DataSource = ds.Tables[0].DefaultView;
                    datalist2.DataBind();
                    con1.Close();
                }
            }
        }
      

  10.   

    外层dataList可以设置个 DataKeyField="Id"
    ItemDataBound事件中这样调用
            //动态获取栏目相关的控件 内层dataList
            DataList 内层dataList = e.Item.FindControl("内层dataList") as DataList;
            if (内层dataList!= null)
            {
                //获取版区ID号
                int intBoardNum=Convert.ToInt32(dLstBorards.DataKeys[e.Item.ItemIndex]);            //......部分代码省略......你懂得            string strSql="select  帖子内容 from 帖子表 where id=" + intBoardNum;            //......部分代码省略........你懂得            //为内层dataList绑定数据
                内层dataList.DataSource = 帖子表;
                内层dataList.DataBind();
            }