【问题标题】:ArgumentOutOfRangeException when accessing resource collection item访问资源集合项时出现 ArgumentOutOfRangeException
【发布时间】:2013-02-21 16:41:50
【问题描述】:

我在哪里可以在 asp.net 生命周期方法中创建此对象而不会收到超出范围的异常。现在,我真正可以获得包含值的资源集合的唯一地方是用于 webschedule 信息的 onreasourcefetched 方法。但我需要在创建 webscheduleinfo 并且它的视图中填充用户之前执行此操作。

protected void Page_Init(object sender, EventArgs e)
        {
            ResourcesCollection resources = WebScheduleInfo1.VisibleResources;

            int count = resources.Count;
            Resource obje = (Resource)resources.GetItem(1);
            string name = obje.Name;
            resources.Clear();
            resources.Add(obje);
            this.WebScheduleInfo1.ActiveResourceName = name;
        }

【问题讨论】:

  • Page_Load 中的集合中有项目吗?如果没有,请提供您如何绑定 WebSchedule 的相关代码。
  • 此代码在页面加载中也不起作用(我现在什么都没有)。现在我正在使用设计视图中的控件绑定 webschedule。您需要至少创建一个 webscheduleinfo 控件,以便您可以访问资源集合。从那里我想找出我有多少资源,以便我可以为每个资源动态创建 webdayview 控件。 WebscheduleInfo 在 page_load 事件之后获取资源,因此在此之前您无法访问集合。在不知道需要创建多少控件的情况下,我无法动态创建控件
  • 您目前在设计视图中绑定什么来获取此信息?它是使用 SqlDataProvider 的 SqlDataSource 吗?您可以选择直接从数据库中获取资源数量,还是更改获取数据的方式以便您可以使用 GenericDataProvider 访问它?

标签: asp.net exception infragistics outofrangeexception


【解决方案1】:

您正在获取资源计数,但您没有检查以确保计数大于 0。

(Resource)resources.GetItem(1) 将失败,除非资源集合中至少包含 2 个项目。

集合是基于 0 的,所以如果你想要第一个项目执行以下操作:

protected void Page_Init(object sender, EventArgs e)
{
    ResourcesCollection resources = WebScheduleInfo1.VisibleResources;

    int count = resources.Count;

    if( count > 0 )
    {
        Resource obje = (Resource)resources.GetItem(0);
        string name = obje.Name;
        resources.Clear();
        resources.Add(obje);
        this.WebScheduleInfo1.ActiveResourceName = name;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-05
    • 2019-06-28
    • 1970-01-01
    相关资源
    最近更新 更多