将CheckBox添加到radgrid标头中的所有列

时间:2018-01-19 10:53:52

标签: checkbox telerik telerik-grid radgrid

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

1 个答案:

答案 0 :(得分:0)

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

首先,您要实现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

如果你能将这个问题作为答案,如果这可以解决你的问题,或者如果这对你有任何帮助,那么我会非常感激。