我正在使用AJAX从GridView中删除一行,并且它可以正常工作。
$('.btnDelete').click(function () {
var rowsCount = <%=gvLineItems.Rows.Count %>;
var row = $(this).closest("tr");
if (rowsCount > 1) {
$.ajax({
type: "POST",
url: "f_PromotionForm.aspx/DeleteItem",
data: JSON.stringify({ itemId: $(this).attr('id') }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(response) {
if (response.d) {
row.remove();
}
}
});
}
});
f_PromotionForm.aspx / DeleteItem是一个从数据库中删除项目的WebMethod。
这是GridView:
<asp:GridView ID="gvLineItems" runat="server" AutoGenerateColumns="false" DataKeyNames="ID" OnRowDataBound="gvLineItems_RowDataBound" >
<Columns>
<asp:TemplateField HeaderText="Item Description">
<ItemTemplate>
<asp:DropDownList ID="dlItemDescription" runat="server" DataValueField="ItemCode" DataTextField="ItemDesc" AppendDataBoundItems="true">
<asp:ListItem Text="-- SELECT ITEM --" Value="-1" />
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<input class="btnDelete" type="button" value="Delete" id='<%# Eval("ID") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
问题:
在删除行后的后续回发(例如,单击“提交”按钮)中,已删除行的位置之后的第一行将从下拉列表中丢失其选定值(默认值为-1)。
当我在浏览器中检查POST时,正在发送该行的下拉列表选定值。其他行中的其他下拉列表不会丢失其选定的值。它只是删除后的第一行中的下拉列表。此外,该行中存在问题的其他字段仍然保留其值(我没有在上面的Gridview代码中显示这些字段以保持简单)。
在具有事件处理程序的按钮触发的回发上,出现以下事件序列导致问题:
Page_Init:从数据库和数据绑定中加载Gridview项目
//call to db and fill datatable dt with query results (dt has correct rows & values), then:
gvLineItems.DataSource = dt;
gvLineItems.DataBind();
Page_Load:影响Gridview的任何事情都发生在这里
事件处理程序:
protected void btnSave_OnClick(object sender, EventArgs e)
{
SaveForm();
}
private bool SaveForm() {
foreach(GridViewRow row in gvLineItems.Rows) //this has the correct number of rows
{
DropDownList dlItemDescription = (DropDownList) row.FindControl("dlItemDescription");
//test2 correctly shows the selected item value
//except for the first row after the previously deleted row.
var test2 = dlItemDescription.SelectedItem.Value; //**PROBLEM
//save stuff...
}
}
请注意: 一个约束是GridView不能使用ViewState,所以我禁用它。
如何阻止下拉列表丢失其选定值?
答案 0 :(得分:0)
之前我曾使用this approach来帮助处理页面上的ajax后期内容。很有用。您仍然需要弄清楚如何保存问题的下拉值并重新应用该值。你可以将POST前的值保存到页面上的隐藏字段,重新应用它,结束POST。第h