我有一个包含所有国家的下拉框(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 );
}
答案 0 :(得分:1)
当下拉列表中的值列表不包含绑定到SelectedValue属性的值时,会发生这种情况。如果这是因为你有一个空值,你可以让数据适配器在字段为空时返回一个空字符串(如果这是问题) 然后在下拉列表中插入一个值以匹配:
<asp:DropDownList ID="dd_bound" runat="server" AppendDataBoundItems="True">
<asp:ListItem Value="" Text="Select one..." />
</asp:DropDownList>
注意AppendDataBoundItems值。