Asp.net gridview编辑需要单击两次

Asp.net gridview编辑需要单击两次,asp.net,gridview,Asp.net,Gridview,为什么在我的行进入编辑模式之前,我需要在gridview控件中单击编辑链接两次 <asp:ObjectDataSource ID="ods" runat="server" TypeName="Employee" SelectMethod="GetAll" ></asp:ObjectDataSource> <asp:GridView ID="GridView1" runat="server" CssClass="styled" OnRowCom

为什么在我的行进入编辑模式之前,我需要在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;
}
}

........... 
受保护的覆盖无效页面加载(对象发送方,事件参数e)
{
如果(!Page.IsPostBack)
{
this.ods.SelectParameters[0].DefaultValue=“”;
} 
} 
受保护的void gv_row命令(对象发送方,GridViewCommandEventArgs e)
{
if(e.CommandName==CRUID.Edit.ToString())
{
this.gv.ShowFooter=false;
}
}

尝试处理行编辑事件以设置EditItem索引:

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

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

<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;
}
}
因为ObjectDataSource中没有与SelectMethod=“GetAll”方法关联的参数


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

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

If not ispostback then
    GridView1.DataSource = dt
    GridView1.DataBind()
end if
否则,您只需覆盖Gridview更改

很好的解释在这个链接。。。

我想可能与您页面上的UpdatePanel有些冲突


请尝试删除所有更新面板,然后重试。。它肯定会有用的。。我的几秒钟前就开始工作了。。因此,我认为分享会很好。

您是否在每个页面加载时填充gridview?不,我没有,我用更多的代码更新了我的问题。可能是您的对象数据源(我假设是“ods”)的问题。不管有什么问题,更多的代码会有所帮助。是的,这是对象数据源,我把断点放在获取数据的GetAll方法上,我注意到,当我第一次单击edit时,它会转到GetAll方法,我点击F5,然后再次返回到同一GetAll方法,我第二次点击F5,然后它会返回到未处于编辑模式的页面,当我第二次点击它时,它会转到要获取所有方法,请单击F5,然后转到RowCommand事件。。。奇怪。。。可能是什么?这听起来很疯狂,但请尝试在RowCommand事件中注释以下行:This.gv.ShowFooter=false;在RowCommand事件中更改页脚可见性可能会导致ODS触发两次。
If not ispostback then
    GridView1.DataSource = dt
    GridView1.DataBind()
end if