我正在使用与SPGridView关联的OOTB SPGridViewPager控件。这在2007年工作正常,但现在我们已升级到2010年,在尝试浏览数据集时出现以下错误;
System.InvalidCastException:无法将类型为“System.Int32”的对象强制转换为“System.String”。在System.Web.UI.Page上的Microsoft.SharePoint.WebControls.SPGridViewPager.OnClickNext(EventArgs args)的Microsoft.SharePoint.WebControls.SPGridView.set_PageIndex(Int32值)处于Microsoft.SharePoint.WebControls.SPGridViewPager.RaisePostBackEvent(String eventArgument) System.Web.UI.Page.ProcessRequestMain中的.RaisePostBackEvent(IPostBackEventHandler sourceControl,String eventArgument)(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint
我的代码仍然指的是版本12的Microsoft.SharePoint程序集,所以我不太确定导致问题的原因是什么。
答案 0 :(得分:4)
这里的问题相同。但是,我没有使用SPGridViewPager
控件。我只是调用.PageIndex = e.NewPageIndex;
两者都是Integer类型。我正在使用PageIndexChanging(object sender, GridViewPageEventArgs e)
方法进行作业。
目前还不确定发生了什么。我现在正在Reflector中看这个。
我想知道你是否在使用DataKeys?看起来这里发生了2次演员表演。见下文。
public override void set_PageIndex(int value)
{
int pageIndex = this.PageIndex;
DataKeyArray dataKeys = this.DataKeys;
base.PageIndex = value;
if (pageIndex != this.PageIndex)
{
this.PreviousPageIndex = pageIndex;
if ((dataKeys == null) || (dataKeys.Count <= 0))
{
this.PreviousPageFirstRowDataKey = null;
this.PreviousPageLastRowDataKey = null;
}
else
{
**this.PreviousPageFirstRowDataKey = (string) dataKeys[0].Value;
this.PreviousPageLastRowDataKey = (string) dataKeys[dataKeys.Count - 1].Value;**
}
}
}
要解决这个问题,我必须仔细查看我的数据源和数据键。我有一组从SQL Server返回的记录,我正在做的是将它们绑定到POCO。这个类有几个Integer类型的公共属性。这些整数是网格上的数据键。我用字符串替换了他们的类型,而不是绕过铸造问题。
希望这是有道理的。它为我修好了。
答案 1 :(得分:0)