下拉框索引问题

时间:2009-04-01 10:31:35

标签: asp.net drop-down-menu

我有一个包含所有国家的下拉框(ddlCountry),如果我选择美国它将显示网格 显示与USA相关的税务信息。如果我编辑信息 在网格中,如果我们在下拉框中将国家美国更改为英国 在ddlCountry中(不是网格编辑窗口中的下拉框,没问题)它显示错误如

指定的参数超出了有效值的范围。 参数名称:ItemHierarchicalIndex 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

异常详细信息:System.ArgumentOutOfRangeException:指定的参数超出了有效值的范围。 参数名称:ItemHierarchicalIndex

来源错误:

第86行:} 第87行: 第88行:if(rgStateTax.EditItems.Count> 0) 第89行:{ 第90行:foreach(rgStateTax.Items中的GridDataItem项目)

源文件:c:\ Projects \ ACS \ sample.Acs.Administration \ UserControls \ TaxManager.ascx.cs Line:88

堆栈追踪:

[ArgumentOutOfRangeException:指定的参数超出了有效值的范围。 参数名称:ItemHierarchicalIndex]    Telerik.WebControls.GridItemCollection.get_Item(String hierarchicalIndex)+323    Telerik.WebControls.GridDataItemCollection.get_Item(String hierarchicalIndex)+37    Telerik.WebControls.RadGrid.get_EditItems()+215    c:\ Projects \ ACS \ sample.Acs.Administration \ UserControls \ TaxManager.ascx.cs中的sample.Acs.Administration.TaxManager.rgStateTax_PreRender(Object sender,EventArgs e):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.Control.PreRenderRecursiveInternal()+171    System.Web.UI.Control.PreRenderRecursiveInternal()+171    System.Web.UI.Control.PreRenderRecursiveInternal()+171    System.Web.UI.Control.PreRenderRecursiveInternal()+171    System.Web.UI.Control.PreRenderRecursiveInternal()+171    System.Web.UI.Control.PreRenderRecursiveInternal()+171    System.Web.UI.Control.PreRenderRecursiveInternal()+171    System.Web.UI.Control.PreRenderRecursiveInternal()+171    System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean 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;
                }
            }
        }

UI中的代码

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

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

    }

包装层中的代码

public List GetTaxRatesByCountryIdAndLocationTypeName(long countryId,string 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 );
    }

在Bo层

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

1 个答案:

答案 0 :(得分:1)

当下拉列表中的值列表不包含绑定到SelectedValue属性的值时,会发生这种情况。如果这是因为你有一个空值,你可以让数据适配器在字段为空时返回一个空字符串(如果这是问题) 然后在下拉列表中插入一个值以匹配:

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

注意AppendDataBoundItems值。