C1DataGrid问题
您好!现在我想定义DataGrid某一列的Header为Combox。
DataGrid的Header为2行,只需Header的第2行为Combox,当Combox的选择项改变时,当前列的显示内容改变,该如何实现?
如果是给ColumnHeader添加CombBox,使用模板列设置header就可以,代码参考:
<c1:C1DataGrid.Columns>
<c1:DataGridTemplateColumn>
<c1:DataGridTemplateColumn.Header>
<ComboBox></ComboBox>
</c1:DataGridTemplateColumn.Header>
</c1:DataGridTemplateColumn>
</c1:C1DataGrid.Columns>
ComboBox本身也可以挂相关的事件,发生改变的时候去做更改。
有关列显示内容改变的这个需求。列头本身也提供了Filter属性,可以做过滤,您可以看看过滤是否可以满足您的需求。
过滤请参考产品随机安装示例:\Documents\ComponentOne Samples\WPF\C1.WPF.DataGrid\CS\DataGridSamples
Alice 发表于 2016-8-15 11:18
如果是给ColumnHeader添加CombBox,使用模板列设置header就可以,代码参考:
ComboBox本身也可以挂相关 ...
谢谢您的回复。
但仍需您的帮助~~~
像图片红色Champion头,如果定义为Combox,内容包括Champion,Runner-up,Third,Fourth,选择不同的显示内容,列的数据更新。
Alice 发表于 2016-8-15 11:18
如果是给ColumnHeader添加CombBox,使用模板列设置header就可以,代码参考:
ComboBox本身也可以挂相关 ...
如果右键点击Champion,出现下拉菜单列表Champion,Runner-up,Third,Fourth,这种方式DataGrid可以实现吗?
安心海叶 发表于 2016-8-15 16:28
如果右键点击Champion,出现下拉菜单列表Champion,Runner-up,Third,Fourth,这种方式DataGrid可以实现 ...
从我的理解来说,你是需要动态的调换列?
你希望在运行时候,根据选择动态的将列1改成列2,列2改成列3?
如果是这样,你的业务逻辑有两部分,一部分就是在列头添加ComboBox,另一部分就是运行时的动态更改列的位置。
第一部分:既然是给Champion列设置ComboBox,那么你程序里的合并是不合适的,因为列头的单元格类型都不一样,就不支持默认的合并方式。
所以XAML部分的代码建议改成
<c1:DataGridTextColumnBinding="{Binding First}" >
<c1:DataGridTextColumn.Header>
<ComboBox SelectedIndex="0" SelectionChanged="ComboBox_SelectionChanged">
<ComboBoxItem>Champion</ComboBoxItem>
<ComboBoxItem>Runner-up</ComboBoxItem>
<ComboBoxItem>Third</ComboBoxItem>
<ComboBoxItem>Fourth</ComboBoxItem>
</ComboBox>
</c1:DataGridTextColumn.Header>
第二部分的逻辑就写在ComboBox_SelectionChanged中,如果是简单的更改列位置,使用DisplayIndex属性(grid.Columns.DisplayIndex = 3;)
代码参考:
private void ComboBox_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
try
{
object obj = (object)e.AddedItems;
//获取ComboBox显示的字符
string str = Convert.ToString(((System.Data.DataRowView)(((object[])(obj)))).Row.ItemArray);
if (str.Equals("Runner-up"))
{
//执行业务逻辑
}
}
catch (Exception)
{
throw;
}
Alice 发表于 2016-8-15 17:24
从我的理解来说,你是需要动态的调换列?
你希望在运行时候,根据选择动态的将列1改成列2,列2改成列3? ...
请问,如果右键点击Champion,出现下拉菜单列表Champion,Runner-up,Third,Fourth,当不想显示Third时,将其隐藏,这种方式DataGrid可以实现吗? 安心海叶 发表于 2016-8-16 16:47
请问,如果右键点击Champion,出现下拉菜单列表Champion,Runner-up,Third,Fourth,当不想显示Third时 ...
可以,通过Column.Visibility属性来设置不可见。
datagrid.Columns.Visibility = Visibility.Collapsed; Alice 发表于 2016-8-16 17:14
可以,通过Column.Visibility属性来设置不可见。
我想知道的是:如何右键点击指定Header,出现下拉菜单,操作当前列,因为DataGrid好像没有HitTest属性,也没有CellType属性 安心海叶 发表于 2016-8-17 09:43
我想知道的是:如何右键点击指定Header,出现下拉菜单,操作当前列,因为DataGrid好像没有HitTest属性, ...
这是业务逻辑的问题。
右键菜单就是通过鼠标的相关事件可以添加。
如何判断点击的是行,还是Header, WPF的事件是可以获取到触发事件的来源的。
代码参考:
void grid_LoadedColumnHeaderPresenter(object sender, C1.WPF.DataGrid.DataGridColumnEventArgs e)
{
e.Column.HeaderPresenter.MouseRightButtonDown += HeaderPresenter_MouseRightButtonDown;
}
void HeaderPresenter_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
//在这里判断,出现下拉菜单, sender可以拿到是什么触发的。e.GetPosition方法可以获取到坐标。这都是WPF的方法。
}
Alice 发表于 2016-8-17 15:44
这是业务逻辑的问题。
右键菜单就是通过鼠标的相关事件可以添加。
如何判断点击的是行,还是Header, W ...
当列头合并时,不能用grid_LoadedColumnHeaderPresenter。
功能已经实现,O(∩_∩)O谢谢
页:
[1]
2