我有一个简单的gridview,其中填充了简单实体的列表
public class Order
{
public int Id { get; set; }
public string Code { get; set; }
public string Description { get; set; }
public int Quantity { get; set; }
}
在Page_Load方法中,我执行以下操作
if (!IsPostBack)
{
this.magrid.DataSource = list;
magrid.DataBind();
}
我的页面定义为
<asp:panel runat="server" ID="MyOrders" Visible="true" Width="900px">
<asp:UpdatePanel runat="server" ID="AjaxPanel">
<ContentTemplate>
<asp:GridView runat="server" ID="magrid" AutoGenerateColumns="False" OnRowDataBound="RowDataBound">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Id"/>
<asp:BoundField DataField="Code" HeaderText="Code"/>
<asp:BoundField DataField="Description" HeaderText="Description"/>
<asp:BoundField DataField="Quantity" HeaderText="Quantity"/>
<asp:TemplateField
HeaderText="Action"
ItemStyle-CssClass="gviCnt gviCntProductid"
HeaderStyle-CssClass="gviModifyOrder">
<ItemTemplate>
<asp:LinkButton
OnClientClick='<%# "MettreAZero(" + Eval("Id") + ");" %>'
Visible='true'
Text='Clear' runat="server"
ID="btnRemoveLine"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</asp:panel>
</div>
</form>
和JavaScript功能本身
{
function MettreAZero(id) {
var table = document.getElementById("magrid");
for (var i = 0, row; row = table.rows[i]; i++) {
var cellid = row.cells[0].innerHTML;
if (cellid == id) {
row.cells[3].innerHTML = "0";
return;
}
}
}
}
</script>
我的问题是,当我单击按钮时,所选行的值将更改为零,但随后会自动将网格重新加载为其原始值。
我想念什么?
谢谢
最佳答案
在您的代码中,设置一个单击事件处理程序:OnClientClick=<%# "MettreAZero(" + Eval("Id") + ");" %>
您应该停止提交事件回发,因为您将丢失刚修改的状态。您只需要将MettreAZero()
修改为return false;
。另一种选择是使用AJAX。