asp.net 2.0 实战(1)_自定义动态新闻列表的制作_jaye.net

(此系列为asp.net 2.0在使用过程中的一些技巧,请博客园的各位老大指正)

有的时候,新闻列表有这样的要求,为了格式的原因,要求显示部分超过固定的字数,超过部分截断成...,如下所示

研究生学位论文格式的...

研究生学位论文格式的...

研究生学位论文格式的...

研究生学位论文格式的...

其html语法为  <p><img src="attachments/200505/soft08.gif">
<a title="研究生学位论文格式的通知" href="研究生学位论文格式的通知.htm">
研究生学位论文格式的...</a></p>

当然如果不要自定义的图片,也可以表达为
<LI><A title=研究生学位论文格式的通知 href="研究生学位论文格式的通知.htm" target=_blank>研究生学位论文格式的通知</A><BR>

其中title用来显示鼠标移到截断的显示内容上出现的提示,截断的显示内容是动态从Title属性中截断,而href属性是Title加上路径内容便为一个URL.

一.处理Repeater

在asp.net 2.0 你可以用BulletedList做新闻列表,但是您无法做到的是产生<a>标记的Title属性,IDE 将提示BulletedList无法使用Eval,Bind等数据绑定的方法.

 

所以用Repeater来做展示控件,Repeater控件是强大的控件,当其他的控件无法实现特殊效果的时候就只能动用它了,但是它的可视化操作很差.

只能在源代码级别操作.

进入源代码。像写html标记的方式定义Repeater的展示模板。如:

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSourcebinghai"><ItemTemplate>
<img src="image/soft08.gif" />
<a href='<%# Eval("Title","{0}.htm") %>' title='<%# Eval("Title") %>'> <%# Eval("ShortTitle") %></a><br>
</ItemTemplate>

 </asp:Repeater>

你可以使用Repeater的其它模板如 <FooterTemplate>,但是这个新闻列表不需要。

二.数据逻辑层

在DataSourceID中,看到用了ObjectDataSource,而不是经常用的SqlDataSource,因为你用SqlDataSource,产生截断某个字段值并进行处理的功能很难做到(方法类适于本系列的第二篇中对SqlDataSource的Select语句的处理方式需要用Substring函数)..ObjectDataSource的功能在于可以自己做一个数据源,这个数据源可以返回Dataset,DataReader,数组等,让控件来绑定。

在App_Code下建一个Class.取名为NewsShow.cs,NewsShow的功能在于从新闻数据库取出数据,并对数据进行截断处理。

加入静态方法(GetNews),返回一个Dataset中包含两个字段,其中的ShortTitle字段是Title的截断结果.

public static DataSet GetNews(string NewsType)  //传入新闻的类型
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["bobbyConnectionString"].ConnectionString);
SqlDataAdapter Sdq = new SqlDataAdapter("SELECT TOP " + ConfigurationManager.AppSettings["TopNews"].ToString() + " [Title] FROM [News] WHERE [NewsType] =@NewsType", con);
DataSet ds = new DataSet();
int NewsCut;
NewsCut = int.Parse(ConfigurationManager.AppSettings["NewsCut"].ToString());
Sdq.SelectCommand.Parameters.AddWithValue("@NewsType", NewsType);
con.Open();
Sdq.Fill(ds);
ds.Tables[0].Columns.Add("ShortTitle");
ds.Tables[0].Columns["ShortTitle"].Expression = "IsNull(IIF(Len(Title)>" + NewsCut + ",SUBSTRING(Title,1, " + NewsCut + "),Title), '')+'...'";//此句就是对Title进行截断处理
con.Close();
return ds;

}

对应的web.config中

<appSettings>
<add key="TopNews" value="4" />
<add key="NewsCut" value="10" />
</appSettings>

三可视化绑定

接下来是建议一个ObjectDataSource,建立与NewsShow.cs的连接,并把Repeater绑定.全部为可视化操作.

1.选择逻辑组件

2.选择Select的方法,UPDATE等方法暂不需要 

3.设置参数,此参数把新闻类型传递到GetNews(string NewsType)

 

4.设置Repeater的DataSourceID

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSourcebinghai">

<ItemTemplate>
<
</ItemTemplate>

 </asp:Repeater>

5.绑定Repeate ItemTemple模板的中控件的属性

img src="image/soft08.gif" />
<a href='<%# Eval("Title","{0}.htm") %>' title='<%# Eval("Title") %>'> <%# Eval("ShortTitle") %></a><br>

ok.完成了.

你可能感兴趣的:(asp.net)