将复选框添加到 radgrid 标题中的所有列



如何将复选框添加到所有标题列(如图所示)并获取选中的值,此处自动生成列为真。请以编程方式或客户端建议。我尝试了 telerik 演示,但那里没有太多帮助。 在此处输入图像描述 Img 中的更正:针对所有列,包括文章类型。

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

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

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

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

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)));
}

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

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

我相信我的OnAutoGeneratingColumn事件的等价物会在您的版本中OnColumnCreated,这是 telerik 的文档

相关内容

最新更新