2012-11-15 3 views
2

linq 데이터 소스에 바인딩 된 드롭 다운 목록이 있습니다. 이 드롭 다운 목록에는 상태가 데이터베이스에서 false로 설정된 것을 제외한 모든 bowzer 번호가 표시됩니다.
이전에 생성 된 레코드가 있다고 가정하고 지금은 거짓으로 설정된 bowzer를 편집하려고합니다. 나는이 예외를 던져 버리고 나는 그것을 다루는 방법을 모른다.Linq 부울이 예외를 반환합니다. DROPDOWNLIST에 항목 목록에 존재하지 않아 유효하지 않은 SelectedValue가 있습니다.

'bowzerddl'에는 항목 목록에 존재하지 않아 유효하지 않은 SelectedValue가 있습니다. 매개 변수 이름 : 값 여기

내가 내 드롭 다운리스트 인은 DetailsView의 편집 버튼을 클릭하자마자 내 LinqDataSource

<asp:LinqDataSource ID="LinqBowzerDS" runat="server" ContextTypeName="ShippingWeb.ShippingDbDataContext" 
EntityTypeName="" Select="new (bowzer_id, bowzer_no)" TableName="Bowzers" 
OrderBy="bowzer_no" Where="expiry_date &gt;= DateTime.Now && status==True"> 

을위한 코드입니다, 난 내가 '예외를 부여하고 전에 언급 한. 이 예외를 잡을 수있는 방법이 있습니까? 편집 할 때 상태가 참인 레코드 만 표시 하시겠습니까? 여기

내 위해 DetailsView

<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" CellPadding="4" 
      DataSourceID="LinqDataSource1" Height="50px" 

      Width="363px" 
      DataKeyNames="challan_id" ForeColor="#333333" GridLines="None" 
      ondatabound="DetailsView1_DataBound" onmodechanged="DetailsView1_ModeChanged" 
     > 

<asp:TemplateField HeaderText="Bowzer No"> 
     <EditItemTemplate> 
      <asp:DropDownList ID ="bowzerddl" runat="server" 
      DataSourceID="LinqBowzerDS" 
      DataTextField="bowzer_no" 
      DataValueField="bowzer_id" 
      selectedValue='<%# bind("bowzer_id") %>' 
      AppendDataBoundItems="true" 
      > 
      <asp:ListItem Selected="True" Value="">(None)</asp:ListItem> 
      </asp:DropDownList> 

     </EditItemTemplate> 
     <ItemTemplate> 
      <asp:Label ID="lblbowzer" runat="server" Text='<%# Eval("Bowzer.Bowzer_no") %>'>                                  </asp:Label> 
     </ItemTemplate> 

    </asp:TemplateField> 

    <asp:CommandField ShowEditButton="True" /> 

</Fields> 
<FooterStyle BackColor="#5D7B9D" ForeColor="White" Font-Bold="True" /> 
<HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
<PagerStyle ForeColor="White" HorizontalAlign="Center" BackColor="#284775" /> 
<RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> 
</asp:DetailsView> 

답변

2

내가이 우리를 위해 일이 링크 Answer No 16

에서 그것을 해결하기위한 코드입니다 : 컨트롤 (들)을 선택한 값 때문에 = "PreventErrorOnbinding"

을 ondatabinding 추가에

protected void PreventErrorOnbinding(object sender, EventArgs e) 
    { 
     dropdownlist theDropDownList = (DropDownList)sender; 
     theDropDownList.DataBinding -= new EventHandler(PreventErrorOnbinding); 
     theDropDownList.AppendDataBoundItems = true; 
     ListItem li = new ListItem("Make a selection >>",""); 
     theDropDownList.Items.Insert(0, li); 
     try 
     { 
      theDropDownList.DataBind(); 
     } 
     catch (ArgumentOutOfRangeException) 
     { 
      theDropDownList.SelectedValue = ""; 
     } 
    } 

는 항상 드롭 다운리스트에서 firts 항목을 선택 ""로 설정되어 있습니다.