【问题标题】:drop down list databind with new item inserted in detailsview在详细信息视图中插入新项目的下拉列表数据绑定
【发布时间】:2023-03-21 14:49:01
【问题描述】:

在我的页面上,我有两个对象数据源;

第一个有一个绑定的下拉列表,带有项目编号和描述。 第二个有一个绑定的详细信息视图,显示项目编号的所有内容。

在下拉列表中选择一个项目,会显示详细信息,如 故意的。当我从详细信息视图中插入新记录时,我想添加它 到下拉列表并选择它。

我试着做一个:

Private Sub dvRecipeItem_ItemInserted(sender As Object, e As DetailsViewInsertedEventArgs) Handles dvRecipeItem.ItemInserted
    ddRecipeItemNumber.DataBind()
End Sub

尽管 Databind 确实将新添加的项目加载到下拉列表中,但它不会使其成为选定值,因此详细信息视图上显示的记录只是第一个项目编号,因为它是按项目编号排序的

有人可以解释一下如何使它适用于我在第二段中描述的场景吗?

非常感谢。

<asp:DropDownList 
ID="ddRecipeItemNumber" 
runat="server" 
width="600px" 
DataSourceID="EntityDataSource_RecipeItemNumber" 
DataTextField="DisplayName" 
DataValueField="Id" 
AutoPostBack="True"
OnDataBinding="Page_Load"
CssClass="cssRecipeItemNumber">
</asp:DropDownList>
<asp:EntityDataSource 
ID="EntityDataSource_RecipeItemNumber" 
runat="server" 
ConnectionString="name=OLTPEntities" 
DefaultContainerName="OLTPEntities" 
EnableFlattening="False" 
EntitySetName="vStd_RefineRecipe" 
EnableDelete="True" 
EnableInsert="True" 
EnableUpdate="True" 
EntityTypeFilter="vStd_RefineRecipe" 
Where="It.Id > 0"
OrderBy="It.ItemNumber">
</asp:EntityDataSource>

<asp:DetailsView 
ID="dvRecipeItem" 
runat="server" 
AutoGenerateRows="False"
DataKeyNames="Id" 
DataSourceID="EntityDataSource_RecipeItemDetail" 
OnItemCommand="dvRecipeItem_ItemCommandEventHandler"
GridLines="None" 
HeaderText="Recipe Detail"
CssClass="cssDetailsView"
HeaderStyle-CssClass="header"
Font-Names="Arial,Sans-Serif"
Font-Size="11px"
AlternatingRowStyle-CssClass="alternating"
CommandRowStyle-CssClass="command"
FieldHeaderStyle-CssClass="fieldheader">
<Fields>
    <asp:TemplateField HeaderText="Id" SortExpression="Id" InsertVisible="False">
    <EditItemTemplate>
        <asp:Label ID="Label_Id" runat="server" Text='<%# Eval("Id") %>'></asp:Label>
    </EditItemTemplate>
    <InsertItemTemplate>
        <asp:TextBox ID="TextBox_Id" runat="server" Text='<%# Bind("Id") %>'></asp:TextBox>
    </InsertItemTemplate>
    <ItemTemplate>
        <asp:Label ID="Label_Id" runat="server" Text='<%# Bind("Id") %>'></asp:Label>
    </ItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Item Number" SortExpression="ItemNumber">
    <EditItemTemplate>
        <asp:TextBox ID="TextBox_ItemNumber" runat="server" Text='<%# Bind("ItemNumber") %>'></asp:TextBox>
    </EditItemTemplate>
    <InsertItemTemplate>
        <asp:TextBox ID="TextBox_ItemNumber" runat="server" Text='<%# Bind("ItemNumber") %>'></asp:TextBox>
    </InsertItemTemplate>
    <ItemTemplate>
        <asp:Label ID="Label_ItemNumber" runat="server" Text='<%# Bind("ItemNumber") %>'></asp:Label>
    </ItemTemplate>
    </asp:TemplateField>
    <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" InsertText="Insert" UpdateText="Update" DeleteText="Delete" />                                
    </Fields>                            
    </asp:DetailsView>
    <asp:EntityDataSource 
        ID="EntityDataSource_RecipeItemDetail" 
        runat="server" 
        ConnectionString="name=OLTPEntities" 
        DefaultContainerName="OLTPEntities" 
        EnableFlattening="False" 
        EntitySetName="RefineRecipe" 
        Where="it.Id = @RecipeId" 
        EnableDelete="True" 
        EnableInsert="True" 
        EnableUpdate="True" 
        EntityTypeFilter="RefineRecipe">
        <WhereParameters>
        <asp:ControlParameter 
        ControlID="ddRecipeItemNumber" 
        DbType="Int32" 
        DefaultValue="1" 
        Name="RecipeId" 
        PropertyName="SelectedValue" />
        </WhereParameters>
        </asp:EntityDataSource>

Private Sub dvRecipeItem_ItemInserted(sender As Object, e As      DetailsViewInsertedEventArgs) Handles dvRecipeItem.ItemInserted

ddRecipeItemNumber.DataBind()
ddRecipeItemNumber.Items.FindByValue(DirectCast(dvRecipeItem.FindControl("TextBox_ItemNumber"), TextBox).Text).Selected = True

End Sub

【问题讨论】:

  • html文件中的dvRecipeItem在哪里

标签: asp.net vb.net


【解决方案1】:

这样写代码::

Private Sub dvRecipeItem_ItemInserted(sender As Object, e As DetailsViewInsertedEventArgs) Handles dvRecipeItem.ItemInserted

    ddRecipeItemNumber.DataBind()
    ddRecipeItemNumber.Items.FindByValue(e.Values["ItemNumber"].ToString()).Selected = true;

End Sub

*String val 是你新插入的字符串

【讨论】:

  • 不知道该怎么做。这是插入模板
  • 我应该将 (string val) 替换为:TextBox_ItemNumber
  • 替换为下拉列表中的任何字符串
  • 我也这样做了:ddRecipeItemNumber.DataBind() ddRecipeItemNumber = CType(dvRecipeItem.FindControl("TextBox_ItemNumber"), DropDownList) 出现错误:无法投射类型为“System.Web.UI”的对象。 WebControls.TextBox' 输入 'System.Web.UI.WebControls.DropDownList'。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-28
  • 2015-12-06
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
相关资源
最近更新 更多