0

首先,我仍然在我的 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值无处不在。但我看不到它在哪里被重置。

4

2 回答 2

0

所以我是个白痴,DetailsView DataKeyNames属性设置不正确。我不小心添加了“planner_id”作为向导的键。

代码一直都很好。感谢大家的努力,但我是一个失败的事业!

于 2013-03-28T11:49:23.570 回答
0

你有EnableViewState="false"设置@Control@Page设置吗?如果未启用视图状态,则控件将始终将默认值作为选定值。这可以在 aspx 级别或 ascx 级别设置。

http://msdn.microsoft.com/en-us/library/ms972976.aspx

于 2013-03-26T22:59:31.633 回答