我是一名asp.net新手。基本上,我在ListView中有一个DropDownList和EditItemTemplate。在下拉列表中选择新项目时,用户不必单击LinkButton进行更新,而是自动进行更新。我已经使用后面的代码尝试了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="|<< " LastPageText=" >>|"
NextPageText=" > " PreviousPageText=" < " />
</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" />
<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>
答案 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);
}