2012-02-06 3 views
0

저는 asp.net 초보자입니다. 기본적으로 ListView 내에 DropDownList 및 EditItemTemplate이 있습니다. 드롭 다운에서 새 항목을 선택하면 사용자가 업데이트를 위해 LinkButton을 클릭하지 않아도되지만 업데이트가 자동으로 수행됩니다. 나는 OnSelectedIndexChanged = "ddlrank_itemChanged"를 사용하여 코드를 사용했고, OnChange = "MyFoo()"를 javascript로 사용했지만, 수행 할 작업에 대한 자세한 내용은 나를 beyound했다.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 코드 숨김 기능에 두 줄의 코드가 필요합니다. 내 대답에서 이것을 언급하지 못했고 포스터의 문제 일 수도 있습니다. :-) – Jay

+0

이 경우에도 OP는이 업데이트에 대한 SQL 데이터 소스를 기반으로하기 때문에 Update 작업을 처리하기위한 추가 코드를 작성해야합니다. OP는 dropdownlist 클래스를 상속 받아 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); 
} 
관련 문제