主要是想用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>
<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();
}
/// <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>
<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();
}
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,怎么读?当然会出错了!!