DropDownList有一个在Gridview中无效的SelectedValue

时间:2013-12-04 15:49:31

标签: c# asp.net gridview .net-4.0

我的一些列'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方法中填充。

1 个答案:

答案 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();
            }
        }
    }
}