Using skmRss.RssFeed
I have been evaluating the use of Scott Mitchell's RSSFeed control for a new version of my website (it's not done yet) for my consulting company that focuses on the Cable Sector of the Telecommunications Industry and I wanted to display relevant information for both Web Services and the Cable Sector. The control is very nice (and free). During my investigation I wanted to perform a couple of actions that were not quickly apparent but still quite doable once I dug a bit deeper. Specifically, I wanted to be able to:
- Keep all items to a single row in the control (without wordwrap).
- Display ToolTips
To put all items in a single row, I noticed that it has a boolean called 'Wrap' for an ItemStyle; however, I could not get this to work so I took a nother approach. I modified the RSSDocument to shorten the title to display it correctly. Here is how I did it:
First the code to wire it up:
cableNewsFeed.DataSource = getList( [DataSource],
__maxTitleLength, cableNewsFeed.MaxItems );
cableNewsFeed.DataBind();
Next the code to create the list:
protected RssDocument getList( string dataSource, int maxTitleLength, int maxFeedLength )
{
// create the engine and get the xml document
RssEngine
engine = new RssEngine();
RssDocument sourceDocument = engine.GetDataSource(
dataSource );
// all of the properties on the document are 'Get'
only, so I created a copy.
RssDocument results = new
RssDocument( sourceDocument.Title,
sourceDocument.Link,
sourceDocument.Description, sourceDocument.Version,
sourceDocument.FeedType,
sourceDocument.PubDate);
// get the max offset ( i pass it this in to the
method based on the max items of control).
int
countOffset = sourceDocument.Items.Count-1;
for( int
i = 0; i < maxFeedLength && countOffset
>= i; i++ )
{
// get the item to clone
RssItem item = sourceDocument.Items[i];
// shorten the title.
string
title = getTitle( item.Title, maxTitleLength );
// add the 'New' item.
results.Items.Add( new
RssItem( title, item.Link, item.Description,
item.Author, item.Category, item.Guid, item.PubDate,
item.RssEnclosure ) );
}
// return the results.
return results;
}
Method to create the title:
protected
string getTitle(
string title,
int maxLength )
{
int length =
title.Length;
if( length >
maxLength ) title =
title.Substring(0,maxLength);
return title +=
"...";
}
If I were really industrious I would have created the method based on the GDI+ MeasureString method. However, I am not guarenteed that everyone will have the font on their machine. I still think it is worthy of doing this, but maybe later.
Next, I wanted the tool tip to display the description of the RSSFeed. To do this, I wired up the ItemDataBound event:
cableNewsFeed.ItemDataBound+=new RssFeedItemEventHandler(cableNewsFeed_ItemDataBound);
Now the method:
private
void
cableNewsFeed_ItemDataBound(object
sender, RssFeedItemEventArgs e)
{
( (
System.Web.UI.WebControls.WebControl
)e.Item).ToolTip =
e.Item.DataItem.Description;
}
The results (btw, it will probably be under a different company name with different verbage):