2012-04-03 20 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のデフォルト編集機能を使用していないようです。コントロールの可視プロパティのオンとオフを設定するだけです。背後に

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

コード:

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

は今、私はあなたのサンプルごとに私のコードを変更し

良い方法は

マークアップ、などのItemTemplateにして、[編集]項目テンプレートを別々に定義し、あります。ただし、編集モードでのみ表示されるドロップダウンリストが1つあります。私がに入れておくと、findControlのコードはコードの背後では機能しません。 DropDownListとしてドロップダウンリストdropdownRoles = gvViewAdmins.Rows [e.NewEditIndex] .FindControl( "gvddlRoles"); this.PopulateRole(dropdownRoles); dropdownRoles.Visible = true; this.SelectRoleDropDownValue(dropdownRoles); 'ドロップダウンは、デバッグ中にnull値を表示します。 – user1181942

+0

私はそれを持っています...私はPreRenderイベントではなく、行Edititngでfindcontrolを持っている必要があります...あなたの助けをありがとう:) – user1181942

+0

あなたが行databoundイベントでも、コントロールを見つけることができますif(e.Row.RowIndex == gvViewAdmins.EditIndex){DropDownList dropdownRoles = gvViewAdmins.Rows [e.NewEditIndex] .FindControl( "gvddlRoles")as DropDownList}は、現在バインディングされている行が編集行であることをチェックします。また、別のこととして、 "dropdownRoles.Visible = true;"と書く必要はありません。それはとにかくそれを表示します。 –