主要是想用datalisty实现绑定一个帖子表,在页面上将帖子的标题显示出来并做到超链接三层架构DAL层出现 用户代码未处理 System.IndexOutOfRangeException异常DAL层代码:
/// <summary>
        /// 查询最新发布的5个公共板块的贴子
        /// </summary>
        /// <param name=""></param>
        /// <returns></returns>
        public IList<Post> GetTop5Post(string sql)
        {
            IList<Post> Post_5 = new List<Post>();            using (SqlDataReader dr = DBHelper.GetReader(sql))
            {
                while (dr.Read())
                {
                    Post post = new Post();
                    post.Code = dr["Code"].ToString();
                    post.Title = dr["Title"].ToString();
                    post.Content = dr["Content"].ToString();
                    Post_5.Add(post);
                }
            }
            return Post_5;
        }BLL层代码:
/// <summary>
        /// 查询最新发布的5个公共板块的贴子
        /// </summary>
        /// <param name="boardsId"></param>
        /// <returns></returns>
        public IList<Post> GetTop5Post()
        {
            string sql = "select top 5 post.title  from post order by post.inserttime  Desc";
            return ps.GetTop5Post(sql);
        }
aspx的代码:
<asp:DataList ID="dlTop" runat="server" BorderStyle="Solid" BorderWidth="1px" 
                    CellPadding="7" ForeColor="#333333" Width="100%" Height="170px">
                    <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                    <ItemTemplate>
                        &nbsp;&nbsp;&nbsp;
                        <asp:Image ID="Image4" runat="server" ImageUrl='<%# Eval("HeadFace") %>' 
                            Visible='<%# GeImg(Eval("HeadFace").ToString()) %>' />
                        <asp:LinkButton ID="lbtnTitle" runat="server" 
                            CommandArgument='<%# Eval("Post_ID") %>' Height="15px" 
                            oncommand="lbtnTitle_Command"
                            Text='<%# Eval("Title").ToString().Substring(0,Eval("Title").ToString().Length<15?Eval("Title").ToString().Length:15)+"..." %>'></asp:LinkButton>
                    </ItemTemplate>
                    <AlternatingItemStyle BackColor="White" />
                    <ItemStyle BackColor="#EFF3FB" />
                    <SelectedItemStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
                </asp:DataList>
aspx.cs的代码:
 public partial class Default : System.Web.UI.Page
    {
        PostManager pm = new PostManager();
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                /// <summary>
                /// 绑定最新公共帖子
                /// </summary>
                TDataBind();
            }        }
        /// <summary>
        /// 绑定最新帖子
        /// </summary>
        /// <param name="id"></param>
        private void TDataBind()
        {
            this.dlTop.DataSource = pm.GetTop5Post();
            dlTop.DataBind();
        }
        /// <summary>
        /// Top5超链接
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void lbtnTitle_Command(object sender, CommandEventArgs e)
        {
            int id = int.Parse(e.CommandArgument.ToString());
            Response.Redirect("Post.aspx?Post_ID=" + id);
            dlTop.DataBind();
        }

解决方案 »

  1.   

    上次就回过你了,你一直不结贴也不回帖,真不知道你在想什么……
    string sql = "select top 5 post.title from post order by post.inserttime Desc";
    你这里只select出了title
    但是
     post.Code = dr["Code"].ToString();
      post.Title = dr["Title"].ToString();
      post.Content = dr["Content"].ToString();
    这里你却要读Code和Content这两列,你根本就没select,怎么读?当然会出错了!!