2012-04-03 19 views
0

Ich habe editierbare Rasteransicht, wenn ich auf Bearbeiten in einer beliebigen Zeile sage "x" klicken, öffnet es im Bearbeitungsmodus, aber wenn ich auf eine andere Zeile klicken, sagen "y", "x" sollte Bearbeitung abbrechen Aber in meinem Code nach dem Klicken auf "y" bleiben beide Zeilen im Bearbeitungsmodus.Grid-Ansicht Problem bearbeiten

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; 

} 

Was ist falsch in meinem Code?

Antwort

2

Nachdem Sie Ihren Code angesehen haben, scheint es, dass Sie nicht die Standard-Bearbeitungsfunktion von Gridview verwenden. Sie setzen nur die sichtbaren Eigenschaften der Steuerelemente ein und aus.

bessere Weg ist, definieren ItemTemplate und Element bearbeiten Vorlage Getrennt wie,

Markup:

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

-Code Behind:

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

Ok jetzt änderte ich meinen Code wie pro Ihre Probe. Es gibt jedoch eine Dropdown-Liste, die nur im Bearbeitungsmodus angezeigt wird. Wenn ich es in aufbewahre, funktioniert Code für findControl nicht im dahinterliegenden Code. 'DropDownList dropdownRoles = gvViewAdmins.Rows [e.NewEditIndex] .FindControl (" gvddlRoles ") als DropDownList; this.PopulateRole (Dropdown-Zeilen); dropdownRoles.Visible = true; this.SelectRoleDropDownValue (dropdownRoles); 'Hier wird im Debug-Modus ein Nullwert angezeigt. – user1181942

+0

Ich habe es ... Ich muss Kontrolle in PreRender Event und nicht in Zeile Edititng finden ... Danke für Ihre Hilfe :) – user1181942

+0

Sie können Steuerelement in Zeile datengebundenen Ereignis auch finden, indem Sie prüfen, ob (e.Row.RowIndex == gvViewAdmins.EditIndex) {DropDownList dropdownRoles = gvViewAdmins.Rows [e.NewEditIndex] .FindControl ("gvddlRoles") als DropDownList}, welches die aktuell bindende Zeile prüft, ist die Bearbeitungszeile. Und noch etwas, es gibt keine Notwendigkeit, "dropdownRoles.Visible = true;" zu schreiben. Es wird es trotzdem anzeigen. –