gridview编辑需要单击两次

时间:2011-07-15 16:13:33

标签: asp.net 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;
}
}

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我检查过你的代码有些错误。更正您的代码,如下所示:

<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;
}
}

如果使用此代码问题无法解决那么你的cssclass中可能会遇到一些问题,因为我已经使用ObjectDataSource在我的机器上检查了你的代码,并且使用编辑过的代码很好。

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

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

因为没有与ObjectDataSource中使用的SelectMethod =“GetAll”方法相关联的参数。

愿这个答案对你有所帮助。

答案 3 :(得分:0)

我猜您的网页上的更新面板存在一些冲突..

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