Как обрабатывать ошибки, используя try catch в раскрывающемся списке в подробном представлении

У меня есть выпадающий список в подробном представлении, где я буду редактировать записи в подробном представлении. Моя проблема - выпадающий список в подробном представлении привязывается к полю и выдает ошибку

DropDownList1 имеет SelectedValue, которое недопустимо, поскольку его нет в списке элементов. Имя параметра: значение

Это связано с тем, что значение выбранного значения отсутствует в раскрывающемся списке.

Может кто-нибудь сказать мне, как справиться с этой ошибкой. Я хочу использовать try catch и ничего не делать и просто игнорировать ошибку или, возможно, передать пустое значение в качестве выбранного значения в раскрывающемся списке.

Основная проблема у меня в том, что я не уверен, куда поместить выражение try catch.

Полный код ниже.

   <asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" 
        DataKeyNames="RecordRef" DataSourceID="EntityDataSource1" Height="50px" 
        Width="125px">
        <Fields>
            <asp:BoundField DataField="RecordRef" HeaderText="RecordRef" ReadOnly="True" 
                SortExpression="RecordRef" />
            <asp:BoundField DataField="CustomerID" HeaderText="CustomerID" 
                SortExpression="CustomerID" />
            <asp:TemplateField HeaderText="JobCategory" SortExpression="JobCategory">
                <EditItemTemplate>
                    <asp:DropDownList ID="DropDownList1" runat="server" 
                        DataSourceID="EntityDataSource2" DataTextField="ItemValue" 
                        DataValueField="ItemValue" SelectedValue='<%# Bind("JobCategory") %>'>
                    </asp:DropDownList>
                    <asp:EntityDataSource ID="EntityDataSource2" runat="server" 
                        ConnectionString="name=CRMSEntities" DefaultContainerName="CRMSEntities2" 
                        EnableFlattening="False" EntitySetName="KeyValues">
                    </asp:EntityDataSource>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("JobCategory") %>'></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("JobCategory") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="JobDescription" HeaderText="JobDescription" 
                SortExpression="JobDescription" />
            <asp:BoundField DataField="JobDate" HeaderText="JobDate" 
                SortExpression="JobDate" />
            <asp:BoundField DataField="JobStatus" HeaderText="JobStatus" 
                SortExpression="JobStatus" />
            <asp:BoundField DataField="Referral" HeaderText="Referral" 
                SortExpression="Referral" />
            <asp:CommandField ShowEditButton="True" ShowInsertButton="True" />
        </Fields>
    </asp:DetailsView>

2 ответа

Вы можете обработать исключение с помощью метода переопределения OnRender вашего usercontrol с помощью try catch для base.Render

Вместо использования Try ... Catch вы можете использовать следующее в коде (в данном случае VB):

Dim ddlItem As ListItem
ddlItem = myDDL.Items.FindByValue(UserInput.ToString())
If Not ddlItem Is Nothing Then
    ddlItem.Selected = True
Else
    myDDL.Text = "Some text to indicate failure"
End If
Другие вопросы по тегам