2012-02-06 12 views
0

私はasp.net初心者です。基本的には、ListView内にDropDownListとEditItemTemplateがあります。ドロップダウンで新しい項目が選択されると、ユーザーは更新のためにLinkBut​​tonをクリックする必要はなく、更新は自動的に行われます。私は、OnSelectedIndexChanged = "ddlrank_itemChanged"を使ってコードを使用し、OnChange = "MyFoo()"をjavascriptで試しましたが、何をすべきかの詳細は私には分かりません。ListView内のDropDownListコントロールから自動更新を起動する

コードサンプルを正しく取り込むことを希望します。どんな提案も高く評価されます。ありがとう。

<asp:ListView ID="ListView1" runat="server" DataKeyNames="rankingID" DataSourceID="SqlDataSource1" OnItemUpdated="ListView1_Item_Updated"> 


    <LayoutTemplate> 
     <table cellpadding="2" width="640px" border="1" runat="server" id="tblRankings"> 
     <tr id="Tr1" runat="server"> 
      <th id="Th1" runat="server">Action</th> 
      <th id="Th3" runat="server">Rank</th> 
      <th id="Th4" runat="server">Committee name</th> 
      <th id="Th5" runat="server">Committee type</th> 
     </tr> 
     <tr runat="server" id="itemPlaceholder" /> 
     </table> 
     <asp:DataPager runat="server" ID="RankingDataPager" PageSize="100"> 
     <Fields> 
      <asp:NextPreviousPagerField ShowFirstPageButton="true" ShowLastPageButton="true" 
      FirstPageText="|&lt;&lt; " LastPageText=" &gt;&gt;|" 
      NextPageText=" &gt; " PreviousPageText=" &lt; " /> 
     </Fields> 
     </asp:DataPager> 
    </LayoutTemplate> 
    <ItemTemplate > 
     <tr id="Tr2" runat="server"> 
     <td> 
      <asp:LinkButton ID="EditButton" runat="Server" Text="Edit" CommandName="Edit" /> 
     </td> 
     <td valign="top"> 
      <asp:Label ID="RankLabel" runat="Server" Text='<%#Eval("rank") %>' /> 
     </td> 
     <td valign="top"> 
      <asp:Label ID="CommitteeNameLabel" runat="Server" Text='<%#Eval("committeename") %>' /> 
     </td> 
     <td valign="top"> 
      <asp:Label ID="CommitteeTypeLabel" runat="Server" Text='<%#Eval("committeetype") %>' /> 
     </td> 
     </tr> 
    </ItemTemplate> 
    <EditItemTemplate > 
     <tr style="background-color: #ADD8E6"> 
     <td> 
      <asp:LinkButton ID="UpdateButton" runat="server" CommandName="Update" Text="Update" />&nbsp; 
      <asp:LinkButton ID="CancelButton" runat="server" CommandName="Cancel" Text="Cancel" /> 
     </td> 
     <td> 
      <asp:DropDownList ID="ddlrank" 
      DataSourceID="sdsrank" 
      DataValueField="vchvalue" 
      DataTextField="vchvalue" 
      OnSelectedIndexChanged="ddlrank_itemChanged" 
      OnChange="MyFoo()" 
      SelectedValue='<%# Bind("rank") %>' runat="server" > 
      </asp:DropDownList> 
     </td> 
     <td> 
      <asp:TextBox ID="CommitteeNameTextBox" runat="server" Enabled="false" ReadOnly="true" Text='<%#Bind("committeename") %>' 
      MaxLength="200" /><br /> 
     </td> 
     <td> 
      <asp:TextBox ID="CommitteeTypeTextBox" runat="server" Enabled="false" ReadOnly="true" Text='<%#Bind("committeetype") %>' 
      MaxLength="20" /><br /> 
     </td> 
     </tr> 
    </EditItemTemplate> 

</asp:ListView> 

答えて

3

ドロップダウンリストのプロパティにAutoPostBack="true"がありません。それが役に立てば幸い。

+0

良い点:

それはちょうどOnSelectedIndexChangedコードビハインドドロップダウンリストで定義された関数内の2行のコードが必要です。私は私の答えでこれを言及しなかった、それはよくポスターの問題かもしれない。 :-) – Jay

+0

これでも、OPは、これらの更新用のSQLデータソースに基づいているため、Update操作を処理するために余分なコードを記述する必要があります。 OPはドロップダウンリストクラスを継承し、Commandコントロールを作成する必要があります。http://aspadvice.com/blogs/joteke/archive/2006/01/21/14794.aspx –

0

あなたは正しい方向に向かっています。 "OnSelectedIndexChanged"を使用するか、コードビハインドページでSelectedIndexChangedイベントを処理する関数を作成できます。どちらの方法でも、ユーザーがドロップダウンから選択すると、ポストバックが取得され、その関数が実行されます。関数では、あなたが望むものを何でもすることができます。このような場合は、選択した値が何であるかを確認し、新しい選択に基づいて画面上に他の値を設定することを意味する場合があります。関数が終了すると、更新されたデータで新しい画面がユーザーのブラウザに送信されます。

0

返信いただきありがとうございました。彼らは私のインターネットの検索を指示し、洗練させてくれました。

私はついに簡単な解決策を見つけました。

protected void ddlrank_itemChanged(object sender, EventArgs e) 
{ 
    ListViewDataItem item = (ListViewDataItem)((DropDownList)sender).Parent; 
    ListView1.UpdateItem(item.DisplayIndex, false); 
} 
関連する問題