Выпадающее окно Индекс проблема

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

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

Сведения об исключении: System.ArgumentOutOfRangeException: указанный аргумент находится вне диапазона допустимых значений. Имя параметра: ItemHierarchicalIndex

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

Строка 86:} Строка 87: Строка 88: if (rgStateTax.EditItems.Count> 0) Строка 89: {Строка 90: foreach (элемент GridDataItem в rgStateTax.Items)

Исходный файл: c: \ Projects \ ACS \ sample.Acs.Administration \ UserControls \ TaxManager.ascx.cs Строка: 88

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

[ArgumentOutOfRangeException: указанный аргумент находится вне диапазона допустимых значений. Имя параметра: ItemHierarchicalIndex] Telerik.WebControls.GridItemCollection.get_Item (StringierarchicalIndex) +323 Telerik.WebControls.GridDataItemCollection.get_Item (String hierarchicalIndex) +37 Telerik.WebControlager.EbControls.Edgrid.get_example. rgStateTax_PreRender (отправитель объекта, EventArgs e) в c: \ Projects \ ACS \ sample.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.RadAJAXControl.OnPreRender (EventArgs.EventArgs. +40 System.Web.UI.Control.PreRenderRecursiveInternal () +80 System.Web.UI.Control.PreRenderRecursiveInternal () +171 System.Web.UI.Control.PreRenderRecursiveInternal () +171 System.Web.UI.Control.PreRenderRecursive () +171 Система m.Web.UI.Control.PreRenderRecursiveInternal () +171 System.Web.UI.Control.PreRenderRecursiveInternal () +171 System.Web.UI.Control.PreRenderRecursiveInternal () +171 System.Web.UI.Control.PreRenderRecursive +171 System.Web.UI.Control.PreRenderRecursiveInternal () +171 System.Web.UI.Page.ProcessRequestMain (логическое includeStagesBeforeAsyncPoint, логическое includeStagesAfterAsyncPoint) +842

это событие предварительной визуализации сетки (rgstatetax)

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;
                }
            }
        }

Код в пользовательском интерфейсе

защищенный void ddlCountryTax_SelectedIndexChanged (отправитель объекта, 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);
            throw;
        }

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

    }

Код в слое оболочки

общедоступный список GetTaxRatesByCountryIdAndLocationTypeName (длинный countryId, строка locationTypeName) {DCTaxRateCollection taxRates = new DCTaxRateCollection (); taxRates.GetByCountryIdAndLoactionTypeName (countryId, locationTypeName);

        return taxRates.ToList();
    }

    public void GetByCountryIdAndLoactionTypeName( long countryId, string locationTypeName )
    {
        IBOTaxRateCollection iboTaxRates = new BOTaxRateCollection();
        iboTaxRates.GetByCountryIdAndLocationTypeName( countryId, locationTypeName );

        SetItems( iboTaxRates );
    }

В слое Бо

    public void GetByCountryIdAndLocationTypeName( long countryId, string locationTypeName )
    {
        ISingleResult<TaxRate> taxRates = Database.TaxRateReadByCountryIdAndLocationTypeName( countryId, locationTypeName );
        PopulateCollection( taxRates );
    }

person peter    schedule 01.04.2009    source источник


Ответы (1)


Это происходит, когда список значений в раскрывающемся списке не включает значение, привязанное к свойству SelectedValue. Если это связано с тем, что у вас есть нулевое значение, вы можете заставить адаптер данных возвращать пустую строку, когда поле имеет значение NULL (если это проблема), а затем вставить значение в раскрывающийся список для сопоставления:

<asp:DropDownList ID="dd_bound" runat="server" AppendDataBoundItems="True">
    <asp:ListItem Value="" Text="Select one..." />
</asp:DropDownList>

Обратите внимание на значение AppendDataBoundItems.

person Richard    schedule 01.04.2009
comment
Я сделал appenddatabounditems равным истине, но возникла та же ошибка - person peter; 01.04.2009
comment
вы знаете, к чему привязаны ценности? это пустое значение или другое значение, которого нет в списке? - person Richard; 01.04.2009
comment
читая сборник / список стран за его пределами в раскрывающемся списке. Что произошло здесь .. В любом случае спасибо 4 повтор - person peter; 02.04.2009