后台动态绘制值班表(Grid表格)
要求:表头除了值班人姓名,还要显示日期,及每天的星期值,用斜杠‘/’分隔。即:几号/星期几
最终实现的效果:根据查询的年月显示每个值班人查询月份每天的值班信息
注:当查询月份不足31天时,显示空白列。如下图:
1.前台页面(WPF页面.xaml)显示
1 <Grid Background="White"> 2 <Grid.RowDefinitions> 3 <RowDefinition Height="35"></RowDefinition> 4 <RowDefinition Height="*"></RowDefinition> 5 <!--<RowDefinition Height="30"></RowDefinition> 6 <RowDefinition Height="0.5*"></RowDefinition>--> 7 </Grid.RowDefinitions> 8 9 <!--筛选条件--> 10 <Grid> 11 <Grid.ColumnDefinitions> 12 <ColumnDefinition Width="120"></ColumnDefinition> 13 <ColumnDefinition Width="100"></ColumnDefinition> 14 <ColumnDefinition Width="110"></ColumnDefinition> 15 <ColumnDefinition Width="80"></ColumnDefinition> 16 <ColumnDefinition Width="120"></ColumnDefinition> 17 <ColumnDefinition Width="150"></ColumnDefinition> 18 </Grid.ColumnDefinitions> 19 20 <!-- 日期星期(方法一)--> 21 <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="5 0"> 22 <TextBlock Text=" 年度:" VerticalAlignment="Center"></TextBlock> 23 <telerik:RadComboBox x:Name="rcb_year" VerticalAlignment="Center" HorizontalContentAlignment="Right" Width="65" SelectionChanged="rcb_year_SelectionChanged"/> 24 </StackPanel> 25 26 <StackPanel Grid.Column="1" Orientation="Horizontal" VerticalAlignment="Center"> 27 <TextBlock Text=" 月份:" VerticalAlignment="Center"></TextBlock> 28 <telerik:RadComboBox x:Name="rcb_month" VerticalAlignment="Center" HorizontalContentAlignment="Right" Width="55" SelectionChanged="rcb_month_SelectionChanged"/> 29 </StackPanel> 30 31 <!--导出--> 32 <telerik:RadButton Grid.Row="0" Grid.Column="2" x:Name="btn_export_1" Background="#FA824F" Margin="5" CornerRadius="2" FontSize="13" Click="btn_export_1_Click"> 33 <StackPanel Orientation="Horizontal"> 34 <Image Source="/PMS_BZ;component/Images/edit.png" Margin="3" Height="12"></Image> 35 <TextBlock Text=" 导出值班表 " Foreground="#FFFFFF" VerticalAlignment="Center"></TextBlock> 36 </StackPanel> 37 </telerik:RadButton> 38 <!--刷新--> 39 <telerik:RadButton Grid.Row="0" Grid.Column="3" x:Name="btn_refresh_1" Background="Orange" Margin="5" CornerRadius="2" FontSize="13" Click="btn_refresh_1_Click"> 40 <StackPanel Orientation="Horizontal"> 41 <Image Source="/PMS_BZ;component/Images/reset.png" Margin="3" Height="12"></Image> 42 <TextBlock Text=" 刷 新 " Foreground="#FFFFFF" VerticalAlignment="Center"></TextBlock> 43 </StackPanel> 44 </telerik:RadButton> 45 46 <!--添加值班--> 47 <telerik:RadButton Grid.Row="0" Grid.Column="4" x:Name="btn_add_schedule" Background="#1DA02B" Margin="5" CornerRadius="2" FontSize="13" Click="btn_add_schedule_Click" Visibility="Collapsed"> 48 <StackPanel Orientation="Horizontal"> 49 <Image Source="/PMS_BZ;component/Images/input.png" Margin="3" Height="12"></Image> 50 <TextBlock Text=" 值班信息管理 " Foreground="#FFFFFF" VerticalAlignment="Center"></TextBlock> 51 </StackPanel> 52 </telerik:RadButton> 53 54 <!--添加案件录入权限信息--> 55 <telerik:RadButton Grid.Row="0" Grid.Column="5" x:Name="btn_add_power" Background="DarkGoldenrod" Margin="5" CornerRadius="2" FontSize="13" Click="btn_add_power_Click" Visibility="Collapsed"> 56 <StackPanel Orientation="Horizontal"> 57 <Image Source="/PMS_BZ;component/Images/comp.png" Margin="3" Height="12"></Image> 58 <TextBlock Text=" 案件录入权限管理 " Foreground="#FFFFFF" VerticalAlignment="Center"></TextBlock> 59 </StackPanel> 60 </telerik:RadButton> 61 </Grid> 62 <!--排班表--> 63 <ScrollViewer x:Name="sv_data" Grid.Row="1" BorderBrush="#25A0DA" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> 64 65 <Grid x:Name="rgv_schedule" Background="White" Width="3150"></Grid> 66 67 </ScrollViewer> 68 69 <!--案件录入权限表--> 70 <!--<StackPanel Grid.Row="2" Background="#25A0DA" Orientation="Horizontal"> 71 <Image Source="/PMS_BZ;component/Images/grid.png" Height="20" Margin="5 0"></Image> 72 <TextBlock Text="案件录入权限表" FontSize="13" VerticalAlignment="Center" Foreground="White" Margin="5 0"></TextBlock> 73 74 <telerik:RadButton Grid.Row="0" Grid.Column="3" x:Name="btn_export_power" Background="#FA824F" Margin="5 2" CornerRadius="2" FontSize="13" Click="btn_export_power_Click"> 75 <StackPanel Orientation="Horizontal"> 76 <Image Source="/PMS_BZ;component/Images/edit.png" Margin="3" Height="12"></Image> 77 <TextBlock Text=" 导出录入权限表 " Foreground="#FFFFFF" VerticalAlignment="Center"></TextBlock> 78 </StackPanel> 79 </telerik:RadButton> 80 </StackPanel> 81 82 <ScrollViewer x:Name="sv_data_power" Grid.Row="3" BorderBrush="#25A0DA" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"> 83 <Grid x:Name="rgv_power" Background="White" Width="3150"></Grid> 84 </ScrollViewer>--> 85 86 </Grid>
2.初始化年度、月份下拉框数据:年度只显示最近5年的年度
1 // 设置时间控件的默认值 2 private void SetDateControl() 3 { 4 try 5 { 6 RadComboBoxItem cmbi_year; 7 RadComboBoxItem cmbi_month; 8 int years = DateTime.Now.Year; 9 //设置年度 10 for (int i = 0; i < 5; i++) 11 { 12 int year = years - i; 13 cmbi_year = new RadComboBoxItem(); 14 cmbi_year.Tag = cmbi_year.Content = year; 15 rcb_year.Items.Add(cmbi_year); 16 if (year == DateTime.Now.Year) 17 { 18 rcb_year.SelectedItem = cmbi_year; 19 } 20 } 21 //设置月份 22 for (int i = 1; i <= 12; i++) 23 { 24 cmbi_month = new RadComboBoxItem(); 25 cmbi_month.Tag = i; 26 cmbi_month.Content = i.ToString() + "月"; 27 rcb_month.Items.Add(cmbi_month); 28 } 29 if (Convert.ToInt32((rcb_year.SelectedItem as RadComboBoxItem).Tag) == DateTime.Now.Year) 30 { 31 rcb_month.SelectedIndex = DateTime.Now.Month - 1; 32 } 33 else 34 rcb_month.SelectedIndex = 11; 35 } 36 catch (Exception ex) 37 { 38 MessageBox.Show(ex.Message); 39 } 40 } 41 42 // 窗体加载 43 private void Page_Loaded(object sender, RoutedEventArgs e) 44 { 45 MyRadBusy.IsBusy = true; 46 47 System.Threading.ThreadPool.QueueUserWorkItem((threadState) => 48 { 49 System.Threading.Thread.Sleep(800); 50 Dispatcher.BeginInvoke((Action)delegate() 51 { 52 try 53 { 54 SetDateControl();//时间变化 55 } 56 catch (Exception ex) 57 { 58 RadWindow.Alert(ex.Message); 59 } 60 }); 61 }); 62 }
3.当年度或月份发生改变时,值班表信息也相应的发生改变
1 //年份发生改变 2 private void rcb_year_SelectionChanged(object sender, Telerik.Windows.Controls.SelectionChangedEventArgs e) 3 { 4 BindingScheduleGrid(); 5 } 6 //月份发生改变 7 private void rcb_month_SelectionChanged(object sender, Telerik.Windows.Controls.SelectionChangedEventArgs e) 8 { 9 BindingScheduleGrid(); 10 }