设置DataGrid多层表头

Snap1.gif

ExpandedBlockStart.gif ContractedBlock.gif          /**/ /// <summary>
InBlock.gif        
/// 方法编号:05
InBlock.gif        
/// 方法名称:SetMultiLayerHeader
InBlock.gif        
/// 内容摘要:创建DataGrid多层表头
InBlock.gif        
/// 算法思路:建立一个ArrayList(1)来放置表征表头的ArrayList(2),通过这种结构来自动生成多层表头
InBlock.gif        
///           数组2的格式要求为:"内容,[rowspan/colspan],[colspan/colspan的值],[样式哈希表]"(带[]的可选)
InBlock.gif        
///           其中[样式哈希表]的为:key/value的对应关系,如Hashtable_style.Add("Font-size","12pt");
ExpandedBlockEnd.gif        
/// </summary>

None.gif          public   void  SetMultiLayerHeader(DataGrid m_grid,
None.gif            System.Web.UI.WebControls.DataGridItemEventArgs e,
None.gif            ArrayList m_headers)
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            e.Item.Visible 
= false;
InBlock.gif
InBlock.gif            
//处理特殊情况
InBlock.gif
            if (m_grid.Controls.Count <= 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                
return;
ExpandedSubBlockEnd.gif            }

InBlock.gif
InBlock.gif            Table m_tb  
= (Table)m_grid.Controls[0];
InBlock.gif            
int m_iTmp  = 0;
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif            
处理多行表头的实体#region 处理多行表头的实体
InBlock.gif            
foreach (object obj in m_headers)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
dot.gif{
InBlock.gif                DataGridItem m_dg     
= new DataGridItem(0,0,ListItemType.Header);
InBlock.gif                ArrayList m_arrHeader 
= (ArrayList)obj;
InBlock.gif
InBlock.gif                TableCell[] m_cells 
= new TableCell[m_arrHeader.Count];
InBlock.gif                
for (int i=0; i< m_cells.Length; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    m_cells[i]      
= new TableCell();
InBlock.gif                    
object[] m_arr  = (object[])m_arrHeader[i];
InBlock.gif                    m_cells[i].Text 
= m_arr.GetValue(0).ToString(); //赋header文字
InBlock.gif

InBlock.gif                    
if (m_arr.Length > 1//如果有行列属性
ExpandedSubBlockStart.gifContractedSubBlock.gif
                    dot.gif{
InBlock.gif                        
if (m_arr.GetValue(1).ToString().ToLower() == "rowspan")//如果有rowspan属性
ExpandedSubBlockStart.gifContractedSubBlock.gif
                        dot.gif{
InBlock.gif                            m_cells[i].RowSpan 
= Convert.ToInt32(m_arr.GetValue(2));
ExpandedSubBlockEnd.gif                        }

InBlock.gif                        
else if (m_arr.GetValue(1).ToString().ToLower() == "colspan")//如果有colspan属性
ExpandedSubBlockStart.gifContractedSubBlock.gif
                        dot.gif{
InBlock.gif                            m_cells[i].ColumnSpan 
= Convert.ToInt32(m_arr.GetValue(2));
ExpandedSubBlockEnd.gif                        }

InBlock.gif
InBlock.gif                        
//处理单元格的样式
InBlock.gif
                        if (m_arr.Length >= 4)
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{
InBlock.gif                            
if (m_arr.GetValue(3!= null)
ExpandedSubBlockStart.gifContractedSubBlock.gif                            
dot.gif{
InBlock.gif                                Hashtable m_hsStyles 
= (Hashtable)m_arr.GetValue(3);
InBlock.gif                            
InBlock.gif                                
if (m_hsStyles.Count > 0)
ExpandedSubBlockStart.gifContractedSubBlock.gif                                
dot.gif{
InBlock.gif                                    System.Collections.IDictionaryEnumerator m_style 
= m_hsStyles.GetEnumerator();
InBlock.gif                                    
for (int j = 0; j < m_hsStyles.Count; j++)
ExpandedSubBlockStart.gifContractedSubBlock.gif                                    
dot.gif{
InBlock.gif                                        m_style.MoveNext();
InBlock.gif                                        m_cells[i].Style.Add(m_style.Key.ToString(),m_style.Value.ToString());
ExpandedSubBlockEnd.gif                                    }

ExpandedSubBlockEnd.gif                                }

ExpandedSubBlockEnd.gif                            }

ExpandedSubBlockEnd.gif                        }
//if (m_arr.Length > 4) 结束
ExpandedSubBlockEnd.gif
                    }
//if (m_arr.Length > 1) //如果有行列属性 结束
ExpandedSubBlockEnd.gif
                }
// for (int i=0; i< m_cells.Length; i++) 结束
InBlock.gif
InBlock.gif                
//将cell加入DataGridItem
InBlock.gif
                foreach (TableCell c in m_cells)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
dot.gif{
InBlock.gif                    m_dg.Cells.Add(c);
ExpandedSubBlockEnd.gif                }

InBlock.gif
InBlock.gif                
//将DataGridItem加入DataGrid
InBlock.gif
                if (m_grid.AllowPaging == true || m_grid.AllowCustomPaging == true)//如果有分页
ExpandedSubBlockStart.gifContractedSubBlock.gif
                dot.gif{
InBlock.gif                    m_tb.Rows.AddAt(m_iTmp 
+ 1,m_dg);
ExpandedSubBlockEnd.gif                }

InBlock.gif                
else //如果没有分页(处理导出excel时)
ExpandedSubBlockStart.gifContractedSubBlock.gif
                dot.gif{
InBlock.gif                    m_tb.Rows.AddAt(m_iTmp,m_dg);
ExpandedSubBlockEnd.gif                }

InBlock.gif
InBlock.gif                m_iTmp
++;
ExpandedSubBlockEnd.gif            }
//foreach (object obj in m_headers) 结束
ExpandedSubBlockEnd.gif
            #endregion
 处理多行表头的实体
ExpandedBlockEnd.gif        }

使用方法:
None.gif ArrayList m_headers  =   new  ArrayList();
None.gif            ArrayList m_arrHeader1 
=   new  ArrayList();
ExpandedBlockStart.gifContractedBlock.gif            m_arrHeader1.Add(
new   object [] dot.gif {"事业部","rowspan","2"} );
ExpandedBlockStart.gifContractedBlock.gif            m_arrHeader1.Add(
new   object [] dot.gif {"办事处","rowspan","2"} );
ExpandedBlockStart.gifContractedBlock.gif            m_arrHeader1.Add(
new   object [] dot.gif {"每月合同培训完成名额数","colspan","12"} );
ExpandedBlockStart.gifContractedBlock.gif            m_arrHeader1.Add(
new   object [] dot.gif {"合计","rowspan","2"} );
ExpandedBlockStart.gifContractedBlock.gif            m_arrHeader1.Add(
new   object [] dot.gif {"积压<br>名额数","rowspan","2"} );
None.gif
None.gif            ArrayList m_arrHeader2 
=   new  ArrayList();
None.gif            
for  ( int  i = 0 ; i < 12 ; i ++ )
ExpandedBlockStart.gifContractedBlock.gif            
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif                m_arrHeader2.Add(
new object[]dot.gif{(i+1).ToString() + ""});
ExpandedBlockEnd.gif            }

None.gif
None.gif            m_headers.Add(m_arrHeader1);
None.gif            m_headers.Add(m_arrHeader2);
None.gif
None.gif            
this .m_BLL.SetMultiLayerHeader( this .dgrSalesList,e,m_headers);
WPF DataGrid 支持多层表头,可以使用 DataGrid 的 ColumnHeaderStyle 属性来自定义表头样式。 首先,你需要定义表头的层次结构。可以使用 DataGrid 的 ColumnGroups 属性来定义多层表头。例如,下面的代码定义了两个层次的表头: ``` <DataGrid.ColumnHeaderStyle> <Style TargetType="{x:Type DataGridColumnHeader}"> <Setter Property="ContentTemplate"> <Setter.Value> <DataTemplate> <TextBlock Text="{Binding}"/> </DataTemplate> </Setter.Value> </Setter> </Style> </DataGrid.ColumnHeaderStyle> <DataGrid.ColumnGroups> <DataGridGroupHeader x:Name="GroupHeader1" Header="Group 1" FontWeight="Bold"/> <DataGridGroupHeader x:Name="GroupHeader2" Header="Group 2" FontWeight="Bold" ParentGroupHeader="{Binding ElementName=GroupHeader1}"/> </DataGrid.ColumnGroups> ``` 在这个例子,第一列的表头为 "Group 1",第二列的表头为 "Group 2",它们都是加粗的。第二列的表头是第一列的子表头,所以它们之间有一个缩进。 然后,你需要为每个表头单元格定义样式。可以使用 DataGrid 的 ColumnHeaderStyle 属性来定义默认样式,也可以为每个表头单元格定义不同的样式。例如,下面的代码定义了一个简单的表头样式: ``` <Style x:Key="HeaderCellStyle" TargetType="{x:Type DataGridColumnHeader}"> <Setter Property="Background" Value="#CCCCCC"/> <Setter Property="Foreground" Value="Black"/> <Setter Property="HorizontalContentAlignment" Value="Center"/> <Setter Property="VerticalContentAlignment" Value="Center"/> <Setter Property="BorderBrush" Value="#888888"/> <Setter Property="BorderThickness" Value="1"/> <Setter Property="Padding" Value="4"/> </Style> ``` 最后,将表头样式应用到 DataGrid 的每个列上。例如,下面的代码定义了两个列,并将表头样式应用到它们的表头单元格: ``` <DataGrid.Columns> <DataGridTextColumn Header="Column 1" Binding="{Binding Property1}" HeaderStyle="{StaticResource HeaderCellStyle}"/> <DataGridTextColumn Header="Column 2" Binding="{Binding Property2}" HeaderStyle="{StaticResource HeaderCellStyle}"/> </DataGrid.Columns> ``` 这样,你就可以创建一个具有多层表头的 WPF DataGrid 了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值