带有列表视图OnItemDataBound事件的类型转换问题



页面加载事件我正在尝试执行

        protected void Page_Load(object sender, EventArgs e)
        {
     XmlReader reader = XmlReader.Create(FeedUrl);
                   SyndicationFeed feed = SyndicationFeed.Load(reader);
                   lstViewNewsFeeds.DataSource = feed.Items;
                   lstViewNewsFeeds.DataBind(); 
         }   

protected void lstViewNewsFeeds_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        try
        {
            // Instantiate listview control object.
            ListViewDataItem lvDataItem = (ListViewDataItem)e.Item;
            at this line given exception
            **DataRowView drvItem = (DataRowView)lvDataItem.DataItem;** 
            //Make sure that data item is binding with listview.
            if (lvDataItem.ItemType == ListViewItemType.DataItem)
            {
                SyndicationItem item = e.Item.DataItem as SyndicationItem;
                LinkButton linkButtonTitle = (LinkButton)e.Item.FindControl("lbNewsTitle");
                Panel panelNewsDescContent = (Panel)e.Item.FindControl("panelNewsDescription"); 
                // Make sure that linkButtonTile is referenced.
                if (linkButtonTitle != null)
                {
                   // linkButtonTitle.Text = Convert.ToString(item.Title);
                    linkButtonTitle.Text = Convert.ToString(drvItem["Title"]);
                }
                // Make sure that panel object is referenced.
                if (panelNewsDescContent != null)
                {
                    Label lblBox = new Label();
                   // lblBox.Text = Convert.ToString(item.Summary);
                    panelNewsDescContent.Controls.Add(lblBox);
                }
                //Label l = e.Row.FindControl("Label1") as Label;
                //l.Text = item.Title.Text;
                //HyperLink hl = e.Row.FindControl("HyperLink1") as HyperLink;
                //hl.Text = item.Title.Text;
                //hl.NavigateUrl = item.Links[0].Uri.AbsoluteUri;
            }
        }
        catch(Exception ee)
        {
            Response.Write(ee.Message);
        }

给出错误:

"System.Data.DataRowView"。无法强制转换类型为的对象"System.ServiceModel.Syndication.SyndictionItem"类型"System.Data.DataRowView"。无法强制转换类型的对象

我无法理解如何删除此错误。请帮我一下。

SyndicationFeed.Items属性返回一个IEnumerable<SyndicationItem>,因此应该将其强制转换为SyndicationItem

SyndicationItem item = (SyndicationItem)lvDataItem.DataItem;

我已经试过了,效果很好。

 SyndicationItem item = e.Item.DataItem as SyndicationItem;  


 protected void lstViewNewsFeeds_ItemDataBound(object sender, ListViewItemEventArgs e)
        {
            try
            {
                // Instantiate listview control object.
                ListViewDataItem lvDataItem = (ListViewDataItem)e.Item;
                //DataRowView drvItem = (DataRowView)lvDataItem.DataItem; 
                //SyndicationItem item = (SyndicationItem)lvDataItem.DataItem;
                //Make sure that data item is binding with listview.
                if (lvDataItem.ItemType == ListViewItemType.DataItem)
                {
                    SyndicationItem item = e.Item.DataItem as SyndicationItem;
                    LinkButton linkButtonTitle = (LinkButton)e.Item.FindControl("lbNewsTitle");
                    Panel panelNewsDescContent = (Panel)e.Item.FindControl("panelNewsDescription"); 
                    // Make sure that linkButtonTile is referenced.
                    if (linkButtonTitle != null)
                    {
                       // linkButtonTitle.Text = Convert.ToString(item.Title);
                        linkButtonTitle.Text = Convert.ToString(item.Title.Text);
                    }
                    // Make sure that panel object is referenced.
                    if (panelNewsDescContent != null)
                    {
                        Label lblBox = new Label();
                        lblBox.Text = Convert.ToString(item.Summary);
                        panelNewsDescContent.Controls.Add(lblBox);
                    }
                    //Label l = e.Row.FindControl("Label1") as Label;
                    //l.Text = item.Title.Text;
                    //HyperLink hl = e.Row.FindControl("HyperLink1") as HyperLink;
                    //hl.Text = item.Title.Text;
                    //hl.NavigateUrl = item.Links[0].Uri.AbsoluteUri;
                }
            }
            catch(Exception ee)
            {
                Response.Write(ee.Message);
            }
}

顺便说一句,谢谢大家的帮助。

试试这个:

protected void lstViewNewsFeeds_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        try
        {
            //Make sure that data item is binding with listview.
            if (lvDataItem.ItemType == ListViewItemType.DataItem)
            {
                SyndicationItem item = e.Item.DataItem as SyndicationItem;
                LinkButton linkButtonTitle = (LinkButton)e.Item.FindControl("lbNewsTitle");
                Panel panelNewsDescContent = (Panel)e.Item.FindControl("panelNewsDescription"); 
                // Make sure that linkButtonTile is referenced.
                if (linkButtonTitle != null)
                {
                   linkButtonTitle.Text = Convert.ToString(item.Title);
                }
                // Make sure that panel object is referenced.
                if (panelNewsDescContent != null)
                {
                    Label lblBox = new Label();
                    lblBox.Text = Convert.ToString(item.Summary);
                    panelNewsDescContent.Controls.Add(lblBox);
                }
                Label l = e.Row.FindControl("Label1") as Label;
                l.Text = item.Title.Text;
                HyperLink hl = e.Row.FindControl("HyperLink1") as HyperLink;
                hl.Text = item.Title.Text;
                hl.NavigateUrl = item.Links[0].Uri.AbsoluteUri;
            }
        }
        catch(Exception ee)
        {
            Response.Write(ee.Message);
        }
}

最新更新