如何将复选框添加到所有标题列(如图中所示)并获取选中的值,此处autogeneratecolumns为true。请以编程方式或Clientside建议。我尝试了telerik演示,但没有太多的帮助。 enter image description here Img中的更正:对于所有列,包括文章类型。
答案 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
如果你能将这个问题作为答案,如果这可以解决你的问题,或者如果这对你有任何帮助,那么我会非常感激。