Указанный аргумент был вне диапазона допустимых значений - PullRequest
0 голосов
/ 02 апреля 2009

У меня есть один выпадающий список (ddlCountryTax), содержащий все страны. Если я выберу США, он будет отображать сетку, отображающую налоговую информацию, связанную с США. Если я отредактирую информацию в сетке, и если мы изменим страну США на Великобританию в раскрывающемся списке в ddlCountryTax (не выпадающий список в окне редактирования сетки, нет проблем для этого) он отображает ошибку вроде

Указанный аргумент находится вне диапазона допустимых значений.
Имя параметра: ItemHierarchicalIndex
Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и месте ее возникновения в коде.
Сведения об исключении: System.ArgumentOutOfRangeException: указанный аргумент находится вне диапазона допустимых значений. Имя параметра: ItemHierarchicalIndex

Ошибка источника:

    Line 86: }
    Line 87:
    Line 88: if( rgStateTax.EditItems.Count > 0 ) 
    Line 89: { 
    Line 90: foreach( GridDataItem item in rgStateTax.Items )

    Source File: c:\Projects\ACS\Aivea.Acs.Administration\UserControls\TaxManager.ascx.cs Line: 88

Трассировка стека:

[ArgumentOutOfRangeException: Specified argument was out of the range of valid values. Parameter name: ItemHierarchicalIndex]
Telerik.WebControls.GridItemCollection.get_Item(String hierarchicalIndex) +323
Telerik.WebControls.GridDataItemCollection.get_Item(String hierarchicalIndex) +37
Telerik.WebControls.RadGrid.get_EditItems() +215
Aivea.Acs.Administration.TaxManager.rgStateTax_PreRender(Object sender, EventArgs e) in c:\Projects\ACS\Aivea.Acs.Administration\UserControls\TaxManager.ascx.cs:88
System.Web.UI.Control.OnPreRender(EventArgs e) +8682870
System.Web.UI.WebControls.BaseDataBoundControl.OnPreRender(EventArgs e) +31
Telerik.RadGridUtils.RadControl.OnPreRender(EventArgs e) +36 Telerik.RadGridUtils.RadAJAXControl.OnPreRender(EventArgs e) +37
Telerik.WebControls.RadGrid.OnPreRender(EventArgs e) +40
System.Web.UI.Control.PreRenderRecursiveInternal() +80
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842

это событие выпадающего кода

    protected void ddlCountryTax_SelectedIndexChanged( object sender, EventArgs e )
    {
        long locationId = ddlCountryTax.SelectedItem.Value.AsLong();

        ContentAdministrationServiceClient client = null;
        List<DCTaxRate> taxRate = null;
        try
        {
            client = new ContentAdministrationServiceClient();
            taxRate = client.GetTaxRatesByCountryIdAndLocationTypeName( locationId, "State" );
            client.Close();
        }
        catch( FaultException )
        {
            AbortClient( client );
        }

        rgStateTax.DataSource = taxRate;
        rgStateTax.Rebind();

    }

это радгрид

   protected void rgStateTax_EditCommand( object sender, EventArgs e )
    {
        BindStateTax();
    }


 private void BindStateTax()
    {
        long locationId = ddlCountryTax.SelectedItem.Value.AsLong();

        List<DCTaxRate> taxRate = null;
        ContentAdministrationServiceClient client = null;
        try
        {
            client = new ContentAdministrationServiceClient();
            taxRate = client.GetTaxRatesByCountryId( locationId );
            client.Close();
        }
        catch( FaultException )
        {
            AbortClient( client );
        }

        rgStateTax.DataSource = taxRate;
        rgStateTax.Rebind();
    }

Это событие перед рендерингом:

protected void rgStateTax_PreRender( object sender, EventArgs e )
    {
        if( rgStateTax.MasterTableView.IsItemInserted )
        {
            foreach( GridItem item in rgStateTax.Items )
            {
                item.Visible = false;
            }
        }

        if( rgStateTax.EditItems.Count > 0 )
        {
            foreach( GridDataItem item in rgStateTax.Items )
            {
                if( item != rgStateTax.EditItems[0] )
                {
                    item.Visible = false;
                }
            }
        }
    }

1 Ответ

1 голос
/ 03 апреля 2009

Я предполагаю, что происходит то, что вы внесли изменения в свою сетку, и перед тем, как вносить эти изменения, вы изменяете данные в сетке.

Похоже, ваша обработка изменений в сетке происходит после события для изменения данных сетки. Чтобы исправить это, вы должны либо обработать любые изменения сетки перед изменением данных сетки, либо выбросить изменения сетки при изменении страны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...