如果已经打开,关闭Telerik Radgrid编辑表单

5
我花了过去一两个小时试图找到一个解决方案,我认为这应该很容易做到,并且我认为以前已经有人问过了,但也许我没有使用正确的术语。 我有一个非常基本的RadGrid,允许扩展行进行编辑或显示更多内容。这是我在其中拥有的GridEditCommandColumn。
<rad:GridEditCommandColumn EditText="+" UniqueName="EditCommandColumn" ItemStyle-Width="30" HeaderStyle-Width="30" />

再次强调,没有什么特别的。当网格加载时,每行都有一个“+”字符,使其可以展开。如果我点击它,它会正确地打开。如果我点击另一行,它将关闭我已经打开的那一行并打开我点击的那一行。太好了,一切正常。

现在我一直在尝试搜索的是,如果我已经打开了一行,我再次点击“+”链接,如果这一行已经打开,则希望它关闭。现在,它仍然保持打开状态。

我是唯一想要在已经打开的情况下再次单击来关闭它的人吗?

3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
5

根据dstepan的建议,我解决了这个问题。我去掉了通用的GridEditCommandColumn行,并替换成了下面的代码。

<rad:GridTemplateColumn UniqueName="ExpandRow">
   <ItemTemplate>
      <asp:Button ID="btnExpand" CommandName="ExpandRow" CommandArgument="<%# Container.ItemIndex %>" Text="+" runat="server" />
    </ItemTemplate>
 </rad:GridTemplateColumn>

然后为事件处理程序进行以下操作:

protected void rg_ItemCommand(object sender, GridCommandEventArgs e)
    {            
        if (e.CommandName == "ExpandRow")
        {
            GridDataItem item = rg.Items[int.Parse(e.CommandArgument.ToString())];

            item.Edit = item.Edit ? false : true; // If it's already in edit mode, change it to false. If not, set it to true

            rg.Rebind();
        }
    }

3
请尝试下面的代码片段。
protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e)
{
    if (e.CommandName == RadGrid.EditCommandName)
    {
        RadGrid1.MasterTableView.ClearEditItems();
    }
}

我尝试过类似的东西,但没有成功。它确实进入了那个if块,但在这之后的某个地方它必须被添加回来。 - Lucky Pierre

2
在我们的应用程序中,我们做了类似的操作,但是不是再次点击加号按钮,而是点击取消按钮。对于这个取消按钮,我们实际上没有任何特定的代码,但是在标记中设置CommandName="Cancel",然后在项目命令事件中检查CommandName并编写我们的代码。然后绑定网格,编辑表单将被关闭。很抱歉它没有回答你的根本问题,但希望能启动你的思路。 下面是示例事件结构,您可以使用CommandName进行过滤并编写您的逻辑。
protected void rg_ItemCommand(object sender, GridCommandEventArgs e)
{            
    if (e.CommandName == "Cancel")
    {
      //custom logic here
    }
}

1
我喜欢你的建议!它帮助我找到了一个解决方案,我在下面发布了。谢谢,伙计! - Lucky Pierre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,