2017-10-02 6 views
0

私のbtnSave_Clickイベント中に、保存をクリックする前に選択した新しいテキストと値の代わりに、ddlConfirmPriceドロップダウンリストの古いテキストと値を取得します。私は何か間違っているのですか?私が作業しているマークアップとコードについて説明します。btnSave_Clickイベント中にDropDownListのSelectedItemを新たに取得する方法はありますか?

まず、これは私が代わりに新しいテキストと値の古いがピックアップされていることを観察し、私のbtnSave_Clickイベント内のコードの単純なブロックである:上記で

if (ddlConfirmPrice.SelectedItem != null) 
{ 
    sPrice = ddlConfirmPrice.SelectedItem.Text.Trim(); 
    iPriceID = int.Parse(ddlConfirmPrice.SelectedItem.Value); 
} 

を、私はsPriceを期待し、 iPriceIDがドロップダウンリストで選択した新しいテキストと値を返すようになりましたが、代わりに以前の値を取得しています。ドロップダウン内のすべての値とテキストのペアは一意であるため、別の値を誤ることはありません。残念ながら、Saveをクリックする前にそのDataGrid行に対して以前にロードされた古いテキストと値のペアを取得しています。しかし、私はちょうどリストの新しい項目を選択しました!それが私が解決しようとしている問題です。

<div class="col-lg-12 "> 
    <div class="table-responsive"> 
     <asp:datagrid id="dgShoppingListDetails" UseAccessibleHeader="True" AutoGenerateColumns="False" CssClass="table table-striped table-bordered table-hover" ShowHeader="True" ShowFooter="True" runat="server" DataKeyField="MerchandiseID" CellPadding="0" GridLines="None" AllowSorting="True" OnSortCommand="dgShoppingListDetails_SortCommand" OnItemCreated="dgShoppingListDetails_ItemCreated"> 
      <FooterStyle CssClass=""> 
      </FooterStyle> 
      <Columns> 
       <asp:TemplateColumn HeaderText="Merchandise ID" SortExpression="MerchandiseID" HeaderStyle-CssClass=" " ItemStyle-CssClass=" "> 
        <ItemTemplate> 
         <asp:Label ID="lblMerchandiseID" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "MerchandiseID") %>'></asp:Label> 
        </ItemTemplate> 
       </asp:TemplateColumn> 

       <asp:TemplateColumn HeaderText="Product Price" SortExpression="LMSPrice" HeaderStyle-CssClass=" " ItemStyle-CssClass=" "> 
        <ItemTemplate> 
         <asp:Label ID="lblPrice" Runat="server" /> 
         <asp:Label ID="lblPriceErrorMsg" Runat="server" /> 
        </ItemTemplate> 
       </asp:TemplateColumn> 

       <asp:TemplateColumn HeaderText="Confirm Price" SortExpression="Price" HeaderStyle-CssClass=" " ItemStyle-CssClass=" "> 
        <ItemTemplate> 
         <asp:dropdownlist id="ddlConfirmPrice" Runat="server"></asp:dropdownlist> 
         <asp:Label ID="lblConfirmPrice" Runat="server" /> 
        </ItemTemplate> 
        <FooterTemplate> 
        </FooterTemplate> 
       </asp:TemplateColumn> 

      </Columns> 
     </asp:datagrid> 
    </div> 
</div> 

<asp:button id="btnSave" runat="server" Width="64px" Text="Save" onclick="btnSave_Click"></asp:button> 

最後に、*た.ascxユーザーコントロールファイルは、上記のように、私* .ASPXマークアップページ内で参照されています:

次に、ここでは簡単なDataGridが内部の私*た.ascxユーザーコントロールファイルです

<%@ Register tagprefix="fac1" tagname="shoppinglist" src="shoppingList.ascx" %> 

<!DOCTYPE html> 
<html lang="en"> 
<head> 

</head> 

<form id="frmShoppingList" method="post" runat="server"> 

    <h1>Post Grades</h1> 

    <fac1:shoppinglist id="shoppingList1" runat="server"></fac1:shoppinglist> 

</form> 
+1

データをドロップダウンリストにバインドするときに、おそらく 'IsPostBack'がチェックされていません。そうしないと、データが再追加され、選択された値がリセットされます。 – VDWWD

+0

あなたは正しいです!私は前にそのことを確認するのをやっていませんでした。ありがとう! – ShieldOfSalvation

+0

私はそれにチェックを入れることができるようにあなたの答えを投稿してもよろしいですか? – ShieldOfSalvation

答えて

1

DropDownList(または他のControl)にデータをバインドするときは、常にIsPostBackをチェックする必要があります。そうでない場合は、データが再追加され、選択/チェックされた状態が失われます。

protected void Page_Load(object sender, EventArgs e) 
{ 
    //check for a postback 
    if (!Page.IsPostBack) 
    { 
     ddlConfirmPrice.DataSource = mySource; 
     ddlConfirmPrice.DataBind(); 
    } 
} 
関連する問題