2011-03-23 32 views
1

我有一个具有编辑/更新功能的GridView。但是,当我点击一次时,它不会触发。我必须再次点击才能触发。休息部分工作正常。GridView编辑点击2次后触发事件

有人可以告诉我发生了什么事吗?这里是我的GV标记:

<asp:GridView ID="gvShowRegistration" runat="server" 
    Height="204px" Width="678px" 
    OnRowEditing = "gvShowRegistration_RowEditing" 
    OnRowUpdating = "gvShowRegistration_RowUpdating" 
    OnRowCancelingEdit = "gvShowRegistration_RowCancelingEdit" CssClass="menu"> 
    <Columns> 
    <asp:CommandField HeaderText="Edit" ShowEditButton="True" ShowHeader="True" ShowSelectButton="True" /> 
    </Columns> 
</asp:GridView> 


public partial class Testing : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
      string getEntity = Request.QueryString["EntityID"]; 
      int getIntEntity = Int16.Parse(getEntity); 

      TestLinq2SqlVs1DataContext dt = new TestLinq2SqlVs1DataContext(); 
      var tr = from r in dt.Users 
        join s in dt.Entities on r.Entity_ID equals s.ID 
        where s.ID == getIntEntity 
        select new 
        { 


        }; 

      gvShowRegistration.DataSource = tr; 
      gvShowRegistration.DataBind(); 


    } 



    protected void gvShowRegistration_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    { 
     //Update code goes here!!! 

    } 


    protected void gvShowRegistration_RowEditing(object sender, GridViewEditEventArgs e) 
    { 
     gvShowRegistration.EditIndex = e.NewEditIndex; 

    } 


    protected void gvShowRegistration_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 
    { 
     gvShowRegistration.EditIndex = -1; 

    } 


} 
+0

当你绑定网格,可能你的网格在回发上被反弹 – kd7 2011-03-23 20:23:58

+0

那么我该怎么做? – 2011-03-23 20:27:14

+0

您的网格在哪个页面事件中绑定其数据? – kd7 2011-03-23 20:30:12

回答

2

我不希望你选择我的答案,但你应该换你的datacontext的一个using块:

protected void Page_Load(object sender, EventArgs e) 
{ 
     string getEntity = Request.QueryString["EntityID"]; 
     int getIntEntity = Int16.Parse(getEntity); 
     using (TestLinq2SqlVs1DataContext dt = new TestLinq2SqlVs1DataContext()) 
     { 
      var tr = from r in dt.Users 
        join s in dt.Entities on r.Entity_ID equals s.ID 
        where s.ID == getIntEntity 
        select new 
        { 


        }; 

      gvShowRegistration.DataSource = tr; 
      gvShowRegistration.DataBind(); 
     } 
} 

它会自动包装你的LINQ在一个try/catch块中并在处理之后处理它。

1

在另一种方法

private void BindData(int id) 
{ 
      TestLinq2SqlVs1DataContext dt = new TestLinq2SqlVs1DataContext(); 
      var tr = from r in dt.Users 
        join s in dt.Entities on r.Entity_ID equals s.ID 
        where s.ID == id      select new 
        { 


        }; 

      gvShowRegistration.DataSource = tr; 
      gvShowRegistration.DataBind(); 
} 

将这个的页面加载做到这一点:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostback()) 
    { 
     BindData(Request.QueryString["EntityId"]); 
    } 
} 

这是只有一半的修复,是什么原因导致ENTITYID改变?它会改变回传吗?如果是这样,你将不得不为此做出调整。

1

把你已经写在Page_Load事件中的函数一样

private void Binddata() 
{ 


     string getEntity = Request.QueryString["EntityID"]; 
     int getIntEntity = Int16.Parse(getEntity); 

     TestLinq2SqlVs1DataContext dt = new TestLinq2SqlVs1DataContext(); 
     var tr = from r in dt.Users 
       join s in dt.Entities on r.Entity_ID equals s.ID 
       where s.ID == getIntEntity 
       select new 
       { 


       }; 

     gvShowRegistration.DataSource = tr; 
     gvShowRegistration.DataBind(); 

代码}

而调用这个函数上row_editing和row_cancellingedit这样的活动

protected void gvShowRegistration_RowEditing(object sender, GridViewEditEventArgs e) 
    { 
     gvShowRegistration.EditIndex = e.NewEditIndex; 
     Binddata(); 
    } 

protected void gvShowRegistration_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e) 
    { 
     gvShowRegistration.EditIndex = -1; 
     Binddata(); 
    }