【问题标题】:gridview edit requires to click twicegridview 编辑需要点击两次
【发布时间】:2014-02-18 07:27:34
【问题描述】:

为什么在我的行进入编辑模式之前,我需要在 gridview 控件中单击两次编辑链接?

<asp:ObjectDataSource ID="ods" runat="server" TypeName="Employee"
SelectMethod="GetAll"  ></asp:ObjectDataSource>

    <asp:GridView ID="GridView1" runat="server" CssClass="styled"  
    OnRowCommand="gv_RowCommand" DataSourceID="ods"
    OnSorting="gv_Sorting"  > 
    <Columns>
    ........... 
    </Columns> 
<ItemTemplate>
 <ItemTemplate>
<div class='actions'>
<asp:Button ID="btnEdit" runat="server" Text=" Edit " ToolTip="Edit Row" CommandName="Edit"  CommandArgument='<%# DataBinder.Eval(Container.DataItem,"Id") %>' CausesValidation="False" />
<span style="padding-left:10px"></span> 
</div>
</ItemTemplate>

    </asp:GridView>

  protected override void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                this.ods.SelectParameters[0].DefaultValue = "";
            } 
        } 

protected void gv_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == CRUID.Edit.ToString())
{
    this.gv.ShowFooter = false;
}
}

【问题讨论】:

  • 您是否在每次页面加载时填充网格视图?
  • 不,我不是,我用更多代码更新了我的问题。
  • 可能与您的对象数据源有关(我假设那是“ods”)。无论出现什么问题,更多代码都会有所帮助。
  • 是的,这是对象数据源,我将断点放在获取数据的 GetAll 方法上,我注意到当我第一次单击编辑时,它转到 GetAll 方法,我按 F5 并再次返回相同的 GetAll方法,然后我第二次按 F5,然后在编辑模式下返回页面,当我第二次单击时,它进入 GetAll 方法,然后 F5,然后进入 RowCommand 事件......奇怪......可能是什么?
  • 这听起来很疯狂,但请尝试在 RowCommand 事件中注释掉以下行:this.gv.ShowFooter = false;在 RowCommand 事件中更改页脚可见性可能会导致 ODS 触发两次。

标签: asp.net gridview


【解决方案1】:

您需要避免在每次回发时重新绑定您的 gridview。

If not ispostback then
    GridView1.DataSource = dt
    GridView1.DataBind()
end if

否则,您只需覆盖 Gridview 更改。

这个链接的解释很好...... http://www.pcreview.co.uk/forums/gridview-two-clicks-needed-enter-place-editing-t3328887.html

【讨论】:

    【解决方案2】:

    尝试处理 RowEditing 事件来设置 EditItem 索引:

    protected void gv_RowEditing(object sender, GridViewEditEventArgs e)
    {
        gv.EditIndex = e.NewEditIndex
    }
    

    【讨论】:

      【解决方案3】:

      在我检查时,您的代码中有一些错误。更正您的代码,如下所示:

      <asp:ObjectDataSource ID="ods" runat="server" TypeName="Employee"
      SelectMethod="GetAll"  ></asp:ObjectDataSource>
      
      <asp:GridView ID="GridView1" runat="server" CssClass="styled"  
      OnRowCommand="gv_RowCommand" DataSourceID="ods"
      OnSorting="gv_Sorting"  > 
      <Columns>
      ........... 
      <asp:TemplateField>
        <ItemTemplate>
          <div class='actions'>
            <asp:Button ID="btnEdit" runat="server" Text=" Edit " ToolTip="Edit Row"  CommandName="Edit"  CommandArgument='<%# DataBinder.Eval(Container.DataItem,"Id") %>' CausesValidation="False" />
            <span style="padding-left:10px"></span> 
           </div> 
          </ItemTemplate>
        </asp:TemplateField>
      </Columns>  
      
      </asp:GridView>  
      
      protected override void Page_Load(object sender, EventArgs e)
              {
                  if (!Page.IsPostBack)
                  {
                      this.ods.SelectParameters[0].DefaultValue = "";
                  } 
              } 
      
      protected void gv_RowCommand(object sender, GridViewCommandEventArgs e)
      {
      if (e.CommandName == "Edit")
      {
          this.gv.ShowFooter = false;
      }
      }
      

      如果在使用此代码时问题没有解决,那么您与 GridView 一起使用的 cssclass 中可能存在一些问题,因为我已经使用 ObjectDataSource 在我的机器上检查了您的代码,并且使用编辑后的代码运行良好。

      我还想知道 CRUID.Edit.ToString() 中的 CRUID 是什么 以及为什么在 Page_Load 事件中使用以下行

      this.ods.SelectParameters[0].DefaultValue = "";
      

      因为没有与您在 ObjectDataSource 中使用的 SelectMethod="GetAll" 方法关联的参数。

      希望这个答案对您有所帮助。

      【讨论】:

        【解决方案4】:

        我猜你页面上的更新面板有一些冲突..

        试试removing all your Update Panels and try again..它肯定会工作..我的工作几秒钟前..所以认为分享会很好..

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-10-25
          • 1970-01-01
          • 2015-07-02
          • 2012-02-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多