Linq布尔值返回异常DROPDOWNLIST有一个SelectedValue,它是无效的,因为它在项目列表中不存在

时间:2012-11-15 05:30:54

标签: c# asp.net linq detailsview

我有一个绑定到linq数据源的下拉列表。此下拉列表显示除数据库中状态设置为false的所有bowzer数字 假设我有一个先前创建的记录,现在我想编辑现在设置为false的bowzer。我被这个例外抛出,我不知道如何处理它。

  

'bowzerddl'有一个SelectedValue,它无效,因为它在项目列表中不存在。   参数名称:值

这是我的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">

当我点击详细信息视图的编辑按钮,我的下拉列表中,我得到了一个例外,我之前已经提到过。有什么方法可以抓住这个例外吗?在编辑时,只显示那些状态为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>

1 个答案:

答案 0 :(得分:2)

我通过此链接Answer No 16

解决了这个问题
  

这对我们有用:

    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 = "";
         }
     }
  

在控件上添加ondatabinding =“PreventErrorOnbinding”

     

由于所选值设置为“”,因此它总是选择第一个   下拉列表中的项目。