2012-04-03 80 views
0

我编辑的网格视图,如果我点击任何一行编辑说,“X”,它在编辑模式下打开,但是如果我点击任何其他行,说“Y”,“X”应取消编辑。但在点击“y”后,在我的代码中,两行都保持编辑模式。网格视图编辑问题

protected void gvViewAdmins_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    gvViewAdmins.EditIndex = e.NewEditIndex; 

    Label lblEmailId = gvViewAdmins.Rows[e.NewEditIndex].FindControl("gvlblEmail") as Label; 
    lblEmailId.Visible = false; 
    ViewState["currentEmailId"] = lblEmailId.Text; 

    TextBox textboxEmailId = gvViewAdmins.Rows[e.NewEditIndex].FindControl("gvtbEmailId") as TextBox; 
    textboxEmailId.Text = ViewState["currentEmailId"].ToString(); 
    textboxEmailId.Visible = true; 

    Label lblRole = gvViewAdmins.Rows[e.NewEditIndex].FindControl("gvlblRole") as Label; 
    lblRole.Visible = false; 
    ViewState["currentRole"] = lblRole.Text; 

    DropDownList dropdownRoles = gvViewAdmins.Rows[e.NewEditIndex].FindControl("gvddlRoles") as DropDownList; 
    this.PopulateRole(dropdownRoles); 
    dropdownRoles.Visible = true; 
    this.SelectRoleDropDownValue(dropdownRoles); 

    LinkButton lbtnUpdate = gvViewAdmins.Rows[e.NewEditIndex].FindControl("lbtnUpdate") as LinkButton; 
    LinkButton lbtnCancel = gvViewAdmins.Rows[e.NewEditIndex].FindControl("lbtnCancel") as LinkButton; 
    LinkButton lbtnEdit = gvViewAdmins.Rows[e.NewEditIndex].FindControl("lbtnEdit") as LinkButton; 

    lbtnUpdate.Visible = true; 
    lbtnCancel.Visible = true; 
    lbtnEdit.Visible = false; 

} 

我的代码有什么问题?

回答

2

查看你的代码后,似乎你没有使用gridview的默认编辑功能。您只是将控件设置为可见属性。

更好的方法是,定义的ItemTemplate和编辑项模板另外像,

标记:

<asp:GridView ID="objGridView" runat="server" AutoGenerateColumns="false" onRowEditing="objGridView_RowEditing"> 
    <columns> 
    <asp:TemplateField HeaderText=""> 
     <ItemTemplate> 
      <asp:Label ID="lblEmailID" runat="server" Text='<%#Eval("<<EmailID Field>>")%>' /> 
     </ItemTemplate> 
     <EditItemTemplate> 
      <asp:TextBox ID="txtEmailID" runat="server" Text='<%#Eval("<<EmailID Field>>")%>'/> 
     </EditItemTemplate> 
    </asp:TemplateField> 
    </columns> 
</asp:GridView> 

代码背后:

protected void objGridView_RowEditing(object sender, GridViewEditEventArgs e) 
{ 
    objGridView.EditIndex = e.NewEditIndex; 
    <<BindGrid Again>> 
} 
+0

好了,现在我改变了我的代码按你的样品。但是有一个下拉列表,只有在编辑模式下才能看到。如果我将它保存在中,findControl的代码在代码后面不起作用。 'DropDownList dropdownRoles = gvViewAdmins.Rows [e.NewEditIndex] .FindControl(“gvddlRoles”)为DropDownList; this.PopulateRole(dropdownRoles); dropdownRoles.Visible = true; this.SelectRoleDropDownValue(dropdownRoles);'这里下拉显示空值,而调试。 – user1181942 2012-04-03 05:11:56

+0

我知道了......我必须在PreRender事件中找到控件,而不是在行Edititng中......感谢您的帮助:) – user1181942 2012-04-03 05:56:24

+0

您还可以在行数据绑定事件中查找控件,方法是检查是否(e.Row.RowIndex == gDViewAdmins.EditIndex){DropDownList dropdownRoles = gvViewAdmins.Rows [e.NewEditIndex] .FindControl(“gvddlRoles”)作为DropDownList},它检查当前绑定行是编辑行。另外,没有必要写“dropdownRoles.Visible = true;”。无论如何它都会显示它。 – 2012-04-05 04:43:58