从ListView中的DropDownList控件触发自动更新

时间:2012-02-06 21:55:36

标签: asp.net listview

我是一名asp.net新手。基本上,我在ListView中有一个DropDownList和EditItemTemplate。在下拉列表中选择新项目时,用户不必单击LinkBut​​ton进行更新,而是自动进行更新。我已经使用后面的代码尝试了OnSelectedIndexChanged =“ddlrank_itemChanged”,以及javascript中的OnChange =“MyFoo()”,但有关做什么的详细信息让我很感兴趣。

我希望我正确地包含代码示例。任何建议将不胜感激。感谢。

<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 个答案:

答案 0 :(得分:3)

我认为您在dropdownlist属性中缺少AutoPostBack="true"。希望它有所帮助。

答案 1 :(得分:0)

你朝着正确的方向前进。您可以使用“OnSelectedIndexChanged”,也可以在代码隐藏页面中创建一个处理SelectedIndexChanged事件的函数。无论哪种方式,当用户从下拉列表中进行选择时,您将获得回发并执行该功能。在功能中,您可以随心所欲。在这种情况下,可能意味着检查所选值是什么,并根据新选择在屏幕上设置其他值。当该功能退出时,会向用户的浏览器发送一个新屏幕,其中包含任何更新的数据。

答案 2 :(得分:0)

感谢您的回复,他们帮助指导和完善我的互联网搜索!

我终于找到了一个简单的解决方案。

在下拉列表中定义的OnSelectedIndexChanged代码隐藏函数中只需要两行代码:

protected void ddlrank_itemChanged(object sender, EventArgs e)
{
    ListViewDataItem item = (ListViewDataItem)((DropDownList)sender).Parent;
    ListView1.UpdateItem(item.DisplayIndex, false);
}