【问题标题】:.NET Object Datasource, DetailsView and DropDownList.NET 对象数据源、DetailsView 和 DropDownList
【发布时间】:2009-10-03 19:46:09
【问题描述】:

好的,我将尝试对我需要完成的任务进行简要而详细的描述。

首先,我定义了一个具有员工对象的 LinqToSQL 数据上下文。然后我创建了一个 BLL(部分员工)来处理我的验证、插入、更新等。此时一切都很好。接下来,我创建了一个详细信息视图,其中对象数据源绑定到我的 Employee 对象上的 select/update/insert 方法。这也很好,数据按应有的方式提取、更新、插入,除了一个问题。我在详细信息视图中的下拉列表中遇到问题。这些是必填字段,不能为空。当该约束被删除时,代码就可以正常工作了。

详细信息视图的代码片段 - 字段缩写以显示相关信息。

<asp:DetailsView ID="grd_empDetails"  runat="server" DataSourceID="empDataSource" DataKeyNames="EmployeeID" DefaultMode="Insert" AutoGenerateRows="false">
            <Fields>
                <asp:BoundField HeaderText="First Name" DataField="FirstName" />
                <asp:TemplateField HeaderText="Type of Employee">
                    <ItemTemplate>
                        <asp:DropDownList ID="empType" runat="server" DataValueField="empType" AppendDataBoundItems="true">
                            <asp:ListItem Text="Full Time" Value="1" />
                            <asp:ListItem Text="Part Time" Value="2" />
                            <asp:ListItem Text="Subcontractor or 1099" Value="3" />
                            <asp:ListItem Text="Intern" Value="4" />
                        </asp:DropDownList>
                    </ItemTemplate>                   
                </asp:TemplateField>
                <asp:CommandField ShowInsertButton="true" ShowCancelButton="true" />    
            </Fields>
        </asp:DetailsView>

调用insert方法时,empType总是返回Nothing(empType是数据库字段)。

将下拉列表的值附加到我的对象以便可以在数据库中正确创建的正确方法是什么?我的大部分搜索一直告诉我如何将下拉列表绑定到对象数据源,但这不是我需要做的。这是一个基本的下拉列表,4 个项目永远不会改变。在这里只使用标准的 HTML 选择标记是否有意义,或者甚至会有所帮助。

感谢您的关注,如果您需要更多信息,请告诉我。

【问题讨论】:

    标签: .net drop-down-menu objectdatasource detailsview


    【解决方案1】:

    看起来很简单,但 VS2008 IDE 并没有告诉我这是一个选项。为了绑定到 ObjectDataSource,您必须执行以下操作:

    <asp:TemplateField HeaderText="Type of Employee">
                        <ItemTemplate>
                            <asp:DropDownList ID="empType" runat="server" DataValueField="empType" SelectedValue='<%#Bind("empType") %>'>
                                <asp:ListItem Text="Full Time" Value="1" />
                                <asp:ListItem Text="Part Time" Value="2" />
                                <asp:ListItem Text="Subcontractor or 1099" Value="3" />
                                <asp:ListItem Text="Intern" Value="4" />
                            </asp:DropDownList>
                        </ItemTemplate>                   
                    </asp:TemplateField>
    

    下拉列表的 SelectedValue 部分对我来说没有显示为下拉列表的有效标记,但 VS 在编译或运行时不会阻塞它,最重要的是,它可以工作!

    【讨论】:

      【解决方案2】:

      一切看起来都很好,但是当您加载它时,下拉列表最初是否已填充?如果没有,请尝试在加载时将其中一项设置为选中,否则如果用户不选择一项,它可能不会返回任何值。

      【讨论】:

      • 这让我发疯了!列表正确显示,但无法从中取回值。经过一些狡猾的谷歌搜索后,我确实弄明白了——它贴在上面。感谢收看!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多