2013-03-26 67 views
0

首先,我還在我的網絡開發者腿下。我已經梳理了一堆SO帖子,博客,新聞組和文章,我似乎無法解決我的問題。這與我看過的至少10個不同的帖子非常相似。ASP下拉列表不改變數值

我有一個ASP gridview,它充當一個顯示和一個選擇列。當你點擊select時,它會將數據引入detailsview。我有一個字段需要是一個下拉框,但每當我更改值並單擊更新時,發送到命令的值就是原始值。

頁標記:

    <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> 

的SqlDataSource:

  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() %>回發各種組合,但我找不到合適的組合。

當我點擊選擇,我想要在下拉列表中選擇當前的計劃。當我選擇一個新的策劃者並點擊更新時,我希望策劃者進行更新。我不知道爲什麼這麼困難,或者我爲了讓它變得困難而大肆宣傳,但我正處在我的智慧結局之中。如果可能的話,我想解釋一下正在發生的事情,而不僅僅是使它工作的神奇的代碼行。

誇張是輕描淡寫。

EDITS:ViewStateEnbabled="true"添加到下拉列表中,selectedIndexChanged事件正在觸發。

再次編輯:將planner_id更改爲<asp:ControlParameter>將添加的顯示器更改爲DetailsView1_OnDataBindMapDataSource1_updating並且該值已遍佈全國。但我無法看到它被重置的位置。

+0

你有沒有嘗試從下拉菜單中刪除'AutoPostBack'屬性?您也可以考慮擺脫SqlDataSource控件,並且僅在代碼隱藏中綁定數據。 – 2013-03-26 18:47:28

+0

謝謝你的迴應。我確實這樣做了,但我仍然沒有任何運氣。我可以刪除'SqlDataSource',我更喜歡編寫這個自動數據對象的代碼,但這是一個原則問題,並且我自己的理解是讓它在這個時候使用這個方法。網站的其他部分相聚得很好,我比預定時間提前,所以我有一些時間來學習。 – Bmo 2013-03-27 11:22:01

回答

0

所以我是一個完整的白癡,沒有正確設置DetailsView DataKeyNames屬性。我不小心將「planner_id」添加爲嚮導中的一個鍵。

代碼一直很好。謝謝大家的努力,但我是一個失敗的事業!

0

您是否在@Control@Page設置中設置了EnableViewState="false"設置?如果viewstate未啓用,控件將始終將默認值作爲選定值。這可以設置爲aspx級別或ascx級別。

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

+0

在那裏沒有一個,但是我放了一個'EnableViewState =「true」',並且該值沒有傳遞給參數。 – Bmo 2013-03-27 11:24:53

+0

如果沒有設置,則默認值爲true。你的意思是沒有達到參數?當頁面發回時你可以做'cboCurrentPlanner.SelectedValue'並獲得下拉的值? – ToddB 2013-03-27 14:34:32

+0

我在'SqlDataSource1_Updating'和'e.Command'中放入了一個斷點,我鑽入參數值並顯示舊值。我投入了很多時間,我似乎無法讓它工作。 – Bmo 2013-03-27 16:24:36