Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 网格视图编辑问题_C#_Asp.net - Fatal编程技术网

C# 网格视图编辑问题

C# 网格视图编辑问题,c#,asp.net,C#,Asp.net,我有可编辑的网格视图,如果我点击任何一行的编辑,比如说“x”,它将在编辑模式下打开,但是如果我点击任何其他行,比如说“y”,那么“x”将取消编辑。但在我的代码中,单击“y”后,两行都保持编辑模式 protected void gvViewAdmins_RowEditing(object sender, GridViewEditEventArgs e) { gvViewAdmins.EditIndex = e.NewEditIndex; Label lblEmailId = gv

我有可编辑的网格视图,如果我点击任何一行的编辑,比如说“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;

}

我的代码有什么问题?

查看代码后,您似乎没有使用gridview的默认编辑功能。您只需打开和关闭控件的“可见”属性

更好的方法是,分别定义ItemTemplate和编辑Item Template,如下所示:

标记:

<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>>
}
protectedvoid objGridView\u RowEditing(对象发送方,GridViewEditEventArgs e)
{
objGridView.EditIndex=e.NewEditIndex;
}

好的,现在我根据您的示例更改了代码。但是,有一个下拉列表仅在编辑模式下显示。如果我将其保留在中,findControl的代码在代码隐藏中不起作用<代码>DropDownList dropdownRoles=gvViewAdmins.Rows[e.NewEditIndex].FindControl(“gvddlRoles”)作为DropDownList;this.PopulateRole(下拉角色);dropdownRoles.Visible=true;这个.SelectRoleDropDownValue(dropdownRoles)此处下拉列表在调试时显示空值。我得到了它…我必须在PreRender事件中而不是在行编辑中查找控件…感谢您的帮助:)您也可以在行数据绑定事件中查找控件,方法是检查(e.Row.RowIndex==gvViewAdmins.EditIndex){DropDownList dropdownRoles=gvViewAdmins.Rows[e.NewEditIndex].findcontrol(“gvdlRoles”)作为DropDownList},检查当前绑定行是否为编辑行。另外,不需要写“dropdownRoles.Visible=true;”。无论如何,它都会显示出来。