好像是这个地方错了---
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="selectByUserID"
            TypeName="sgwBLL.HouseCZManager">
            <SelectParameters>
                <asp:SessionParameter Name="userID" SessionField="userInfo" Type="Int32"/>
            </SelectParameters>
</asp:ObjectDataSource>
session["userInfo"]存的是User对象,我想把User的userID传给selectByUserID方法查询相关信息,现在好像userID传不过去,不知道问题出在哪里,麻烦大家帮忙解决一下.堆栈信息--------------[InvalidCastException: 对象必须实现 IConvertible。]
   System.Convert.ChangeType(Object value, TypeCode typeCode, IFormatProvider provider) +2563170
   System.Web.UI.WebControls.Parameter.GetValue(Object value, String defaultValue, TypeCode type, Boolean convertEmptyStringToNull, Boolean ignoreNullableTypeChanges) +248
   System.Web.UI.WebControls.Parameter.get_ParameterValue() +67
   System.Web.UI.WebControls.ParameterCollection.GetValues(HttpContext context, Control control) +255
   System.Web.UI.WebControls.ObjectDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +248
   System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +13
   System.Web.UI.WebControls.DataBoundControl.PerformSelect() +140
   System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +68
   System.Web.UI.WebControls.GridView.DataBind() +5
   System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +61
   System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +67
   System.Web.UI.Control.EnsureChildControls() +97
   System.Web.UI.Control.PreRenderRecursiveInternal() +50
   System.Web.UI.Control.PreRenderRecursiveInternal() +171
   System.Web.UI.Control.PreRenderRecursiveInternal() +171
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5731 

解决方案 »

  1.   

    估计是selectByUserID方法的问题
    贴出来看看
      

  2.   

            /// <summary>
            /// 根据用户id查询
            /// </summary>
            /// <param name="userID"></param>
            /// <returns></returns>
            public static List<HouseCZ> selectByUserID(int userID)
            {
                string sql = string.Format("select * from HouseCZ where userID={0} order by pubdate desc",userID);
                DataTable dt = DBHelper.GetDataSet(sql);
                if (dt == null)
                {
                    return null;
                }
                else
                {
                    if (dt.Rows.Count == 0)
                    {
                        return null;
                    }
                    else
                    {
                        return getHouseCZList(dt);
                    }
                }
            }
      

  3.   

    调用selectByUserID方法的代码是怎么写的
      

  4.   

    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="selectByUserID" 
                TypeName="sgwBLL.HouseCZManager"> 
                <SelectParameters> 
                    <asp:SessionParameter Name="userID" SessionField="userInfo" Type="Int32"/> 
                </SelectParameters> 
    </asp:ObjectDataSource> 就是这里调用 的
      

  5.   

    不是那个方法的问题 刚才手动调用那方法没问题,应该是objectdatasource的问题吧
      

  6.   

    你传进去的是userInfo类型而不是userID的类型Int32 所以转型失败了
      

  7.   

    那有没有办法把 userID传过去?
      

  8.   

    user的类型是userInfo吧? 把方法改成下面这样试试/// <summary> 
            /// 根据用户id查询 
            /// </summary> 
            /// <param name="userID"> </param> 
            /// <returns> </returns> 
            public static List <HouseCZ> selectByUserID(userInfo user) 
            { 
                string sql = string.Format("select * from HouseCZ where userID={0} order by pubdate desc",user.userID); 
                DataTable dt = DBHelper.GetDataSet(sql); 
                if (dt == null) 
                { 
                    return null; 
                } 
                else 
                { 
                    if (dt.Rows.Count == 0) 
                    { 
                        return null; 
                    } 
                    else 
                    { 
                        return getHouseCZList(dt); 
                    } 
                } 
            }