【问题标题】:Adding CheckBox to all columns in radgrid Header将 CheckBox 添加到 radgrid 标题中的所有列
【发布时间】:2018-01-19 10:53:51
【问题描述】:

如何将复选框添加到所有标题列(如图所示)并获取选中值,这里 autogeneratecolumns 为 true。请以编程方式或客户端建议。我尝试了 Telerik 演示,但从那里没有太多帮助。 enter image description here Img 中的更正:对于所有列,包括文章类型。

【问题讨论】:

  • 并非每一列似乎都有一个复选框,例如 文章类型 为什么会这样?如果AutoGenerateColumns="True" 如何确定哪些列需要复选框,哪些不需要?这对于找到最佳解决方案确实有很大的不同。在您的情况下,您似乎最好不要自动生成列...
  • 感谢您的建议,但要求是所有列都应该有复选框,取决于选中的值需要执行一些其他操作。无论如何,列数将是固定的,您能建议 AutoGenerateColumns="False" 时吗?我会做出改变。
  • 自动生成列时也可以,但是在您的屏幕截图中,有一列缺少复选框,这让我感到困惑。为了让我帮助你,我需要知道你到底想对复选框的结果做什么?您是否需要在每个复选框更改的事件上发生一些事情,或者您会创建一个对所有选中的列执行某些操作的方法?
  • 图片有错误,我已经更新了。实际上所有的列都需要有复选框。不需要复选框更改事件,在按钮单击时需要获取选中和未选中的值以进行进一步处理。谢谢。
  • @Oceans 能否请您提供解决方案,因为需求很紧急。需要任何澄清。?

标签: checkbox telerik telerik-grid radgrid


【解决方案1】:

有多种方法可以获得所需的结果,但这是我能想到的第一个解决方案。为了找到适合您情况的最佳解决方案,我需要更多地了解确切的要求。
根据您提供的当前信息,这是我能想到的最好的:

首先,您需要实现 GridView 的 OnAutoGeneratingColumn 事件。

<telerik:RadGridView x:Name="MyGridView" AutoGenerateColumns="True" AutoGeneratingColumn="MyGridView_OnAutoGeneratingColumn"  ItemsSource="{Binding MyData}" />

在这种情况下,您可以自定义生成的列。例如,您可以避免生成某些列或自定义您真正想要的任何内容。在您的情况下,您当然希望将CheckBox 添加到Header

private void MyGridView_OnAutoGeneratingColumn(object sender, GridViewAutoGeneratingColumnEventArgs e)
{
    //Extra1: Ignore this event for certain columns
    if (e.Column.UniqueName.Contains("extra1"))
    {
        return;
    }
    //Extra2: Disable the generation of a column entirely
    if (e.Column.UniqueName.Equals("extra2"))
    {
        e.Cancel = true;
        return;
    }

    //Place a CheckBox inside the header
    e.Column.Header = new StackPanel()
    {
        Orientation = Orientation.Vertical,
        Children =
        {
            new TextBlock()
            {
                Text = e.Column.UniqueName,
                Margin = new Thickness(2),
                HorizontalAlignment = HorizontalAlignment.Center
            },
            new CheckBox()
            {
                Margin = new Thickness(2),
                HorizontalAlignment = HorizontalAlignment.Center
            }
        }
    };
}

现在应该会为您提供所需的结果,如屏幕截图所示。

第二部分是获取选中列的列表。对于这一部分,我真的不知道你到底在寻找什么,但我会给你一些东西让你开始。
考虑以下是按钮的OnClick 事件:

private void MyButton_OnClick(object sender, RoutedEventArgs e)
{
    var cols = new List<GridViewColumn>();
    foreach (var col in MyGridView.Columns)
    {
        var hc = MyGridView.ChildrenOfType<GridViewHeaderCell>().FirstOrDefault(q => q.Column != null && q.Column.UniqueName == col.UniqueName && q.Column.DisplayIndex == col.DisplayIndex);
        if (hc == null) continue;
        var cb = hc.FindChildByType<CheckBox>();
        if (cb != null && cb.IsChecked == true)
            cols.Add(col);
    }
    MessageBox.Show(string.Join(", ", cols.Select(q => q.UniqueName)));
}

如果您还有其他问题或需要更多帮助,请发表评论。


更新:我使用的是 Telerik 的 WPF 版本,这就是我使用 telerik:RadGridView 的原因。我没有意识到您使用的是 ASP.NET AJAX 版本,它使您的成为telerik:RadGrid

我相信我的OnAutoGeneratingColumn 事件在您的版本中相当于OnColumnCreated here is the documentation of telerik

如果这解决了您的问题,如果您能将其标记为答案,我也将不胜感激,或者如果这对您有任何帮助,至少给它一个赞成票。

【讨论】:

  • 感谢您的回复,我正在实施相同的解决方案,但 AutogeneratingColumn="MyGridView_OnAutoGeneratingColumn" 事件不支持我发现,“telerik:RadGrid”正在用于生成网格。 “telerik:RadGrid”中是否有类似的事件而不是 AutogeneratingColumn.?
  • @JayK - 我已经更新了我的答案,您正在寻找OnColumnCreated,将来您可能希望在创建问题时包含您当前使用的 Telerik 版本。您提供的信息越多,就能更好地帮助您
  • 感谢@Oceans 的解决方案,下次发布问题时我会记住提及版本。在 ASP.NET AJAX 版本中复制上述解决方案时遇到问题。找不到“GridViewAutoGeneratingColumnEventArgs”,而是放置了“GridColumnCreatedEventArgs”,然后我无法获得“e.Column.Header = new StackPanel()”,因此仍然无法在标题单元格中生成复选框。你能建议这部分的解决方案吗?
  • @JayK - 恐怕我无法再为您提供帮助了,我对您的 Telerik 版本一无所知。我相信您可以尝试设置e.Column.HeaderTemplate = new DataTemplate(new StackPanel()...),但这只是我可以帮助您的程度。也许this page 可能对你有用。
猜你喜欢
  • 2018-06-22
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多