5

在过去的一两个小时里,我试图找到一个解决方案来解决我认为应该很容易做的事情,以及我认为以前有人问过的事情,但也许我没有使用正确的术语。

我有一个非常基本的 RadGrid,它允许扩展行以编辑或显示更多内容。这是我在里面的 GridEditCommandColumn

<rad:GridEditCommandColumn EditText="+" UniqueName="EditCommandColumn" ItemStyle-Width="30" HeaderStyle-Width="30" />

再次,没什么特别的。当网格加载时,每行都有一个“+”字符,允许它展开。如果我单击它,它会正确打开。如果我单击另一行,它会关闭我打开的行并打开我单击的行。太好了,一切都很好。

现在我一直在尝试搜索的是,如果我已经打开了一行并且我再次单击“+”链接,如果它已经打开,我希望关闭该行。现在,它仍然处于打开状态。

如果您再次单击它(如果它已经打开),我是唯一一个希望它关闭的人吗?

4

3 回答 3

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();
        }
    }
于 2013-04-05T13:18:44.220 回答
3

请尝试使用以下代码片段。

protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e)
{
    if (e.CommandName == RadGrid.EditCommandName)
    {
        RadGrid1.MasterTableView.ClearEditItems();
    }
}
于 2013-04-05T06:34:27.513 回答
2

在我们的应用程序中,我们做了类似的事情,但是我们不是再次单击加号按钮,而是单击取消按钮。对于这个取消按钮,我们实际上没有任何特定的代码,但我们CommandName="Cancel"在标记中设置,然后在项目命令事件中检查并CommandName在那里编写我们的代码。然后绑定网格,并关闭编辑表单。抱歉,它没有回答您的根本问题,但希望有一些东西可以让您开始。

下面是示例事件结构,您可以在其中使用CommandName& 编写逻辑进行过滤。

protected void rg_ItemCommand(object sender, GridCommandEventArgs e)
{            
    if (e.CommandName == "Cancel")
    {
      //custom logic here
    }
}
于 2013-04-04T21:42:34.157 回答