我的一些列'EditItemTemplate中的GridView中有一个DropDownList。以下是一个条目的示例:
<asp:TemplateField meta:resourcekey="server" SortExpression="server">
<ItemTemplate>
<asp:Label Text='<%# Bind("server") %>' ID="server" runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList Width="100%"
SelectedValue='<%# Bind("server") %>'
OnInit="server_Init" ID="server" runat="server">
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
问题是这些字段包含的某些值随着时间的推移会变为“非活动”,并且在DropDownList中不会显示为可选。当打开旧订单并编辑此字段具有无效值的行时,我希望DropDownList不显示任何值。相反,它将抛出一个声明无效条目的ArgumentOutOfRangeException异常。
最干净的解决方案是什么?我真的不想在GridView的代码隐藏中工作以捕获每个DropDownList的这个错误,因为它们很多。有什么方法可以捕获这个错误,默认为空,并让它适用于GridView中的所有DropDownLists?
感谢。
注意: DropDownList正在其OnInit方法中填充。
答案 0 :(得分:0)
我真的不想在GridView的代码隐藏中工作以捕获每个DropDownList的错误,因为它们很多。
嗯,我很抱歉,但你必须编写你的方法,我不知道如何在没有编码的情况下捕获错误:
ASP标记
<asp:TemplateField meta:resourcekey="server" SortExpression="server">
<ItemTemplate>
<asp:Label Text='<%# Bind("server") %>' ID="server" runat="server" />
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="server" runat="server"
Width="100%">
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
代码背后
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (e.Row.RowIndex == GridView1.EditIndex)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("server");
ddl.OnInit = "server_Init";
try
{
ddl.SelectedValue = server;
ddl.DataBind();
}
catch (ArgumentOutOfRangeException ex)
{
ddl.SelectedValue = "Order Not Available";
ddl.DataBind();
}
}
}
}