【问题标题】:Asp.net client side editing of gridview gets overwritten网格视图的 Asp.net 客户端编辑被覆盖
【发布时间】:2013-11-16 21:21:00
【问题描述】:

我有一个简单的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>

我遇到的问题是,当我单击按钮时,所选行的值会更改为零,但随后会自动将网格重新加载为其原始值。

我错过了什么?

谢谢

【问题讨论】:

  • MettreAZero() 修改为 return false; 以停止处理提交。
  • 是的,修复了它。我还添加了将 OnClientClick 更改为此 OnClientClick=''
  • 您是否能够使用 document.getElementById("magrid") 获取 GridView 元素?您应该使用 。
  • 如果我这样做 var name = ;警报(名称); name 等于 HTMLTableElement,它没有行.. 我想我错过了一些明显的东西
  • var name = '';工作,缺少一些'

标签: c# javascript jquery asp.net gridview


【解决方案1】:

在您的代码中,您设置了一个点击事件处理程序:

OnClientClick=&lt;%# "MettreAZero(" + Eval("Id") + ");" %&gt;

您应该阻止提交事件回发,因为您将丢失刚刚修改的状态。您只需要将MettreAZero() 修改为return false;。另一种选择是使用 AJAX。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    相关资源
    最近更新 更多