首先,我仍然在我的 web 开发腿下。我梳理了成堆的 SO 帖子、博客、新闻组和文章,但似乎无法解决我的问题。它与我看过的至少 10 个不同的帖子非常相似。
我有一个 ASP gridview,它充当显示和选择列。当您单击选择时,它会将数据扔到详细信息视图中。我有一个字段需要是一个下拉框,但是每当我更改值并单击更新时,发送到命令的值就是原始值。
页面标记:
<asp:TemplateField HeaderText="Planner Name">
<ItemTemplate>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="cboCurrentPlanner" runat="server" DataSourceID="plannerDataSource"
DataTextField="planner_name" DataValueField="planner_id" SelectedValue='<%# Eval("planner_id") %>' AutoPostBack="true" ></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowEditButton="True" />
</Fields>
<FooterStyle BackColor="#CCCC99" ForeColor="Black" />
<HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" />
</asp:DetailsView>
sql数据源:
SelectCommand="SELECT vendor_key, vendor, planner_name, street, city, state_country, planner_id, country FROM V_MAP_MarkerInfo WHERE (vendor_key = @vendor_key)"
UpdateCommand="MAP_usp_webUpdatePlanToVendor"
UpdateCommandType="StoredProcedure" onupdating="mapDetailSource_Updating" >
<SelectParameters>
<asp:ControlParameter ControlID="GridView1" Name="vendor_key"
PropertyName="SelectedValue" Type="Int32" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="vendor_key" Type="String" />
<asp:Parameter Name="planner_id" Type="Int32" />
<asp:Parameter Name = "vendor" Type="String" />
</UpdateParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="plannerDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:vendor_mapConnectionString %>"
SelectCommand="SELECT [planner_id], [planner_name] FROM [MAP_planners]"
OldValuesParameterFormatString="original_{0}">
</asp:SqlDataSource>
我不会发布存储过程代码,我知道这是有效的。原始值是唯一使其成为参数的值。
我尝试了各种<%# Bind/Eval() %>
回发组合,但找不到合适的组合。
当我单击选择时,我希望在下拉列表中选择当前计划器。当我选择一个新的规划器并单击更新时,我希望规划器更新。我不知道为什么这会如此困难,或者我搞砸了什么让它变得困难,但我已经束手无策了。如果可能的话,我想解释一下正在发生的事情,而不仅仅是让它工作的神奇代码行。
目瞪口呆是轻描淡写。
编辑:ViewStateEnbabled="true"
添加到下拉列表中,selectedIndexChanged
事件正在触发。
再次编辑:将 planner_id 更改为<asp:ControlParameter>
添加监视器,DetailsView1_OnDataBind
并且MapDataSource1_updating
值无处不在。但我看不到它在哪里被重置。