开发者

gridview edit requires to click twice

Why is that I need to click the edit link twice, in a gridview control, before my row enters into edit mode?

<asp:ObjectDataSource ID="ods" runat="server" TypeName开发者_如何学C="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;
}
}


You need to avoid rebinding your gridview on each postback.

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

Otherwise you just overwrite Gridview changes.

Great explanation at this link... http://www.pcreview.co.uk/forums/gridview-two-clicks-needed-enter-place-editing-t3328887.html


Try handling the RowEditing event to set the EditItem Index:

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


There are some mistakes in your code as i examined. Correct your code as shown below:

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

If on using this code the problem does not solve then there may be some problem in your cssclass which you used with your GridView as I have Checked your code on my machine using ObjectDataSource and it works well using edited code.

Also I want to know that what is CRUID in CRUID.Edit.ToString() and why you used the following line in Page_Load event

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

as there are no parameter associated with your SelectMethod="GetAll" method used in ObjectDataSource.

May this answer help you.


I guess there is some conflict with the updatepanels on your page..

Try removing all your Update Panels and try again.. It will work for sure.. Mine worked a few seconds ago.. so thought It would be good to share..

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜